7

你好我正在使用digi动态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 端口发送 readingreg 数组,为此我需要将其作为字符串。我似乎无法将其转换为字符串。谢谢你的帮助。此外,如果有人可以告诉我如何一次处理每个元素而不是整个数组,那很好,因为只有 4 个元素。

4

2 回答 2

9

0xaa当 plainchar签名时溢出,使用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;
}
于 2014-09-02T19:56:08.807 回答
2

如果您的机器是大端,您可以执行以下操作:

char str[9];

sprintf(str, "%x", *(uint32_t *)readingreg);

如果您的机器是 little endian,则必须交换字节顺序:

char str[9];
uint32_t host;

host = htonl(*(uint32_t *)readingreg);
sprintf(str, "%x", host);

如果可移植性是一个问题,无论您的字节顺序如何,您都应该使用方法二。

我得到以下输出:

printf("0x%s\n", str);

0x4aaaaaa0

于 2014-09-02T19:53:39.937 回答