前言
linux c 代码开发中,经常需要将字符串转换成数值,或者将数值转换成字符串,今天讲讲如何将16进制字符串转成十进制数。
提示:以下是本篇文章正文内容,下面案例可供参考
一、十六进制字符串转换成十六进制数值
示例:“0x400”转换成十六进制数0x400(十进制为)传入字符必须以”0x“开头
二、代码
1.十六进制字符串转十进制数
代码如下(示例):
int hexStrToDecimal(char buf[])
{
int i, m, n;
int temp = 0;
m = strlen(buf);
if (strncmp(buf, "0x", 2) != 0) {
return -1;
}
for (i = 0; i < m ; i++) {
if (buf[i] >= 'A' && buf[i] <= 'F') {
n = buf[i] - 'A' + 10;
} else if (buf[i] >= 'a' && buf[i] <= 'f') {
n = buf[i] - 'a' + 10;
} else if( buf[i] >= '0' && buf[i] <= '9') {
n = buf[i] - '0';
} else {
if(i != 1) {
return -1;
}
continue;
}
temp = temp * 16 + n;
}
return temp;
}
2.读入数据
测试代码:
int main() { int num = hexStrToDecimal("0x10"); if (num != - 1) { printf("num = %d\n", num); } num = hexStrToDecimal("0x100"); if (num != - 1) { printf("num = %d\n", num); } return 0; }
运行结果:
num = 16 num = 256
总结
函数还有不足之处,比如传入的字符串如果为0xFFFFFFFF,函数里面的temp会溢出,后续再完善。