【问题标题】:C Programming convert String representation of Hex to HexC 编程将十六进制的字符串表示形式转换为十六进制
【发布时间】:2018-07-14 20:32:04
【问题描述】:

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

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

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

0x41 0x0C 0x00 0x00

【问题讨论】:

  • buf - 大小为 8 - 将不包含以 '\0' 结尾的字符串。如果您也想将buf 用作字符串,请编写char buf[9],例如当写printf("%s\n",buf)
  • 什么是实际的 HEX 数字。如果我有一个 int 变量,我怎么知道它是十六进制、八进制、二进制还是十进制。或者可能只是数字。

标签: c string hex


【解决方案1】:

您可以使用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 中使用它。如果您也想将buf 用作字符串,请编写char buf[9],例如写printf("%s\n",buf)时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2018-01-31
    • 2018-01-22
    • 2017-08-12
    • 1970-01-01
    • 2014-03-10
    • 2011-08-04
    • 2016-01-10
    相关资源
    最近更新 更多