在C中将十六进制转换为字符串?
问题描述:
你好我正在使用digi动态c。我想在将它转换为字符串在C中将十六进制转换为字符串?
char readingreg[4];
readingreg[0] = 4a;
readingreg[1] = aa;
readingreg[2] = aa;
readingreg[3] = a0;
目前,当我做printf
声明它必须是这样的:
printf("This is element 0: %x\n", readingreg[0]);
但我想这个字符串,所以我可以用printf
声明这样
printf("This is element 0: %s\n", readingreg[0]);
我本质上是通过TCP/IP端口发送readreg数组,我需要它作为字符串。我似乎无法将其转换为字符串。谢谢你的帮助。 另外,如果有人可以告诉我如何一次完成每个元素而不是整个数组,那么这将很好,因为只有4个元素。
答
0xaa
溢出时,普通char
签订后,使用unsigned char
:
#include <stdio.h>
int main(void)
{
unsigned char readingreg[4];
readingreg[0] = 0x4a;
readingreg[1] = 0xaa;
readingreg[2] = 0xaa;
readingreg[3] = 0xa0;
char temp[4];
sprintf(temp, "%x", readingreg[0]);
printf("This is element 0: %s\n", temp);
return 0;
}
+0
这工作。谢谢! – 2014-09-03 16:01:35
+0
不客气 – 2014-09-04 07:24:34
答
如果你的机器是大端,你可以做到以下几点:
char str[9];
sprintf(str, "%x", *(uint32_t *)readingreg);
如果你的机器是小端,你必须交换字节顺序:
char str[9];
uint32_t host;
host = htonl(*(uint32_t *)readingreg);
sprintf(str, "%x", host);
如果可移植性一个问题,你应该使用方法二,不管你的字节顺序如何。
我得到以下输出:
printf("0x%s\n", str);
0x4aaaaaa0
请澄清一下,究竟是什么给你希望打印第二个printf()。 – 2014-09-02 19:42:28
[INET_NTOA()](http://linux.die.net/man/3/inet_ntoa) – 2014-09-02 19:52:20
使用'snprintf'打印到缓冲区,然后打印?还要记住字符串终止0字节。 – hyde 2014-09-02 19:52:50