gpt4 book ai didi

c - 如何将 u32_t 中的十六进制值转换为其相应的 char/ascii 值?

转载 作者:行者123 更新时间:2023-11-30 16:18:38 25 4
gpt4 key购买 nike

我正在尝试从 TCP 堆栈读取数据并使用这些数据来控制外部接口(interface)等。数据位于 u32_t 中,因此如果我向接口(interface)写入“test”,则十六进制值对应于 0x74657374。我想将这些数据转换为相应的字符,以便更容易使用这些数据。如何将 u32_t 中的十六进制值转换为其字符字符串?

我尝试通过 %c 格式说明符直接打印数据,但它只显示字符串的第一个字符。

/* indicate that the packet has been received */
tcp_recved(tpcb, p->len);
// Put actual data in 32 bit unsigned integer.
tempPtr = (u32_t*)p->payload;
// Print length of the actual data.
xil_printf("Received package. Length = %d \r\n", p->len);
// Reverse the data so it corresponds to the data sent.
u32_t reversedTemp = byte_reverse_32(*tempPtr);

// Prints hex value of data
xil_printf("Data: %08x \r\n",reversedTemp);

if (reversedTemp == 0x6C656431) { /* Read "led1" */
xil_printf("Data Read: led1");
} else if (reversedTemp == 0x74657374) { /* Read "test */
xil_printf("Data Read: test");
}

因此,当我在 if 语句中使用完整的十六进制值时,我只想使用字符串值。因此,为了检查测试,它应该是==“test”而不是==0x74657374。

最佳答案

这里有一个错误:tempPtr = (u32_t*)p->payload; ... byte_reverse_32(*tempPtr)。这是严格的别名违规,而且很可能也是未对齐的访问。不要这样做。

显然没有必要交换字节来补偿字节顺序,因为无论如何您都打算将它们转换为字符串(?)。如果是这样,您可以这样做(假设网络大端,CPU 小端):

tcp_recved(tpcb, p->len);
char str[4+1] =
{
[0] = p->payload[3];
[1] = p->payload[2];
[2] = p->payload[1];
[3] = p->payload[0];
[4] = '\0'
};

关于c - 如何将 u32_t 中的十六进制值转换为其相应的 char/ascii 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55848774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com