C编程将十六进制的字符串表示形式转换为十六进制

时间:2018-07-14 20:32:05

标签: c string hex

我对C很陌生。 我想将十六进制数字的字符串表示形式转换为实际的十六进制数字吗?

#include <stdio.h>
int main()
    {
        char buf[8] = "410C0000";
        printf("%s\n",buf);
        return 0;
    }

我想将字符串分解成4个独立的十六进制数字。 我可以进一步处理以进行计算:

0x41 0x0C 0x00 0x00

1 个答案:

答案 0 :(得分:1)

您可以使用sscanf,它是scanf的变体,它从字符串而不是从stdin或文件中读取。格式说明符%X指定将输入视为十六进制数,%02X另外表示要精确地读取两位数,%02hhX另外定义将结果存储到一个字节(即{ {1}},而不是大概64位的整数值。

代码如下:

unsigned char

输出:

int main()
{
    char buf[8] = "410C0000";

    unsigned char h0=0, h1=0, h2=0, h3=0;
    sscanf(buf+6, "%02hhX", &h0);
    sscanf(buf+4, "%02hhX", &h1);
    sscanf(buf+2, "%02hhX", &h2);
    sscanf(buf+0, "%02hhX", &h3);
    printf("0x%02X 0x%02X 0x%02X 0x%02X\n",h3, h2, h1, h0);
    return 0;
}

BTW:0x41 0x0C 0x00 0x00 -的大小为8-将不包含以buf结尾的字符串,因此您将无法在'\0'中使用它。如果您也想使用printf作为字符串,例如,写char buf[9]。编写buf时。