首页 > 解决方案 > C 编程将十六进制的字符串表示形式转换为十六进制

问题描述

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

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

我想分解字符串并将其转换为 4 个单独的十六进制数字。我可以进一步处理计算:

0x41 0x0C 0x00 0x00

标签: cstringhex

解决方案


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

代码如下所示:

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;
}

输出:

0x41 0x0C 0x00 0x00

顺便说一句:buf- 大小为 8 - 将不包含终止的字符串'\0',因此您将无法在printf. char buf[9]如果您也想用作字符串,请编写buf,例如在编写printf("%s\n",buf).


推荐阅读