练习 2-3 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀 0x 或 0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f 以及 A~F。

#include <stdio.h>


#define MAXLINE 19


int getlines(char s[],int lim);
int hToi(char s[]);


int main(void)
{
   int len,inter;
   char line[MAXLINE];


   printf("Please enter hexadecimal:\n");
   while((len = getlines(line,MAXLINE)) > 0)
   {
      if((inter = hToi(line)))
      printf("Decimalism is %u\n",inter);
      else
      printf("Please enter the correct format!\n");
 printf("Whether to continue?(Enter quit):\n");
   }
   printf("Bye!\n");


   return 0;
}


int getlines(char s[],int n)
{
   int c,i;


   for(i = 0; i < n - 1 && (c = getchar()) != EOF && c != '\n';++i)
       s[i] = c;
   if(c == '\n')
   {
      s[i] = c;
 s[i] = '\0';
   }
   if(i >= n - 1)
    while(getchar() != '\n')
       continue;


   return i;
}


int hToi(char s[])
{
   int i,j,z;
   int n;
   const int number = 17;
   char hxs[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};


   n = 0;
   for(i = 0; s[i] != '\0'; ++i)
      if(s[i] >= 'a' && s[i] <= 'z')
    s[i] = s[i] + 'A' - 'a';
   i = 0;
   if(s[i] == '0')
   {
      ++i;
 if(s[i] == 'x' || 'X')
   ++i;
   }
   z = 0;
   while(s[i] != '\0'){
      for(j = 0; j < number; ++j)
    if(s[i] == hxs[j])
         {
   n = 16 * n + j;
   z = 1;
   break;
         }
      if(!z)
         return 0;
      z = 0;
      ++i;
   }


   return n;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值