我得到一个字符串 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/