将存储为字符的十六进制字符串转换为C中的十进制

标签 c decimal hex scanf

我得到一个字符串 hex_txt,其中包含代码中概述的 4 位十六进制数字,分为两个数组条目。我需要将其转换为十进制。以下是我的做法。

unsigned char hex_txt[] = "\xAB\xCD";
unsigned char hex_num[5];
unsigned int dec_num;

sprintf(hex_num, "%.2x%.2x", (int)hex_txt[0], (int)hex_txt[1]);
printf("%s\n", hex_num);
sscanf(hex_num, "%x", &dec_num);
printf("%d\n", dec_num);

是否有更快或更有效的方法?这是我目前的临时解决方案,但我想知道是否有合适的方法来做到这一点。

最佳答案

int result = (unsigned char)hex_txt[0] * 256 + (unsigned char)hex_txt[1];

字符串hex_txt包含两个字节;我猜顺序是大端(如果是小端则反转下标)。 hex_txt[0] 的字符代码是 0xAB,hex_txt[1] 的字符代码是 0xCD。使用无符号字符转换可确保您不会被有符号字符弄乱。

或者,一次性完成:

printf("%d\n", (unsigned char)hex_txt[0] * 256 + (unsigned char)hex_txt[1]);

关于将存储为字符的十六进制字符串转换为C中的十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394169/

相关文章:

c - 将不同的结构传递给函数(使用 void *)

c++ - 在 Windows 上用 C++ 打开文件的不同方法?

javascript - JavaScript 有十进制数学库吗?

java - 我在这里做错了什么(Java)十进制到二进制

Javascript - 如何获得 2 种 HEX 颜色之间的 HEX 颜色渐变列表?

c - 在 C/C++ 中使用 realloc 时出错

c - 如何获取读取字节数

python - django float 或小数点在保存时无意四舍五入

c - 从二进制文件中重复 fread() 16 位

c - 在十六进制中搜索特定字节