C - 将十六进制转换为字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - 将十六进制转换为字符串相关的知识,希望对你有一定的参考价值。

继一个老问题Converting hex to string in C?

批准的答案建议使用sprintf将每个十六进制转换为字符串。

我有两个问题 -

1)当我有像0a这样的十六进制时,我希望我的字符串也有0a,但是按照上面的解决方案,结果将有a

2)我在这里做错了什么?

#include <stdio.h>

int main(void)
{
    unsigned char readingreg[10];
    readingreg[0] = 0x4a;
    readingreg[1] = 0xab;
    readingreg[2] = 0xab;
    readingreg[3] = 0x0a;
    readingreg[4] = 0x40;
    unsigned char temp[10];
    int i = 0;

    while (i < 5)
    {
        sprintf(temp + i, "%x", readingreg[i]);
        i++;
    }
    printf("String: %s
", temp);
    return 0;
}

o / p似乎 - String: 4aaa40

3)结合这两个问题,我希望我的结果字符串是4aabab0a40

TIA

答案

您的代码有几个问题。

第一个unsigned char temp[10];应该是unsigned char temp[11];包含一个字符串终止符。

接下来是格式规范"%x"应该是"%02x"所以每个值是2位数。

然后temp + i应该是temp + i*2所以每对数字都写在正确的位置。

纠正这些错误:

#include <stdio.h>

int main(void)
{
    unsigned char readingreg[10];
    readingreg[0] = 0x4a;
    readingreg[1] = 0xab;
    readingreg[2] = 0xab;
    readingreg[3] = 0x0a;
    readingreg[4] = 0x40;
    unsigned char temp[11];
    int i = 0;

    while (i < 5)
    {
        sprintf(temp + i*2, "%02x", readingreg[i]);
        i++;
    }
    printf("String: %s
", temp);
    return 0;
}

现在是程序输出所必需的

String: 4aabab0a40

以上是关于C - 将十六进制转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

将“ff0000”之类的字符串转换为目标c中的十六进制数

求C语言将十六进制字符串转换为整型int的函数源代码,要求不能用库函数?

C语言:怎么将十进制数字转换为二进制字符串,谁能帮我写个函数

这个奇怪的函数将字符串转换为二进制吗?

在 C 中将字符转换为二进制

在 C 中将 ascii char[] 转换为十六进制 char[]