第7周 C语言程序设计(新2版) 练习2-3 字符串转换成等价整型值

本文介绍了一个将十六进制格式的字符串转换为整数的C语言函数。该函数首先检查并忽略前缀'0x'或'0X',然后逐个字符地解析字符串,将每个十六进制字符转换为其对应的十进制值,并计算出整个字符串所表示的整数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题及代码:

/*十六进制(hexadecimal)数字组成的字符串(string)
转换(convert)为等价的整型值(integer)*/

#define YES  1
#define NO  0

/*字符串转换成整数的函数*/
int htoi(char s[]) 
{
   int hexdigit,i,inhex,n;
   i=0;
   if(s[i]=='0')   //跳过可选的0x、0X(skip optional 0x or 0X)
      {
        i++;
      if(s[i]=='x'||s[i]=='X')
        i++;
       }
    n=0;
    inhex=YES;   // 假定有效16进制数字 (assume  vaild hexadecimal digit)
  for(;inhex==YES;i++)   //i的取值为合法的十六进制数时,inhex取值保持YES
    {
      if(s[i]>='0'&&s[i]<='9')
         hexdigit=s[i]-'0';      //取值0-9
      else if(s[i]>='a'&&s[i]<='f')
         hexdigit=s[i]-'a'+10;   //s[i]-a取值0-5
      else if(s[i]>='A'&&s[i]<='A')
         hexdigit=s[i]-'a'+10;
      else
         inhex=NO;
      if(inhex==YES)
         n=16*n+hexdigit;   //不是很理解这个算法
     }
    return n;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值