【发布时间】:2013-12-18 14:27:49
【问题描述】:
我有一个数组-
uint8_t arrayTest[] = {
0, 0xC1,
0, 0, 0, 0x0a,
0, 0, 0, 0x50
};
因此,以下带有 uint32_t 的 printf 显示了正确的输出“a”:
printf("%x ",ntohl(*((uint32_t *)(arrayTest+2))));
但是uint16_t显示不正确,虽然我把数组指针转发了两个字段,但输出是“a0000”-
printf("%x ",ntohl(*((uint16_t *)(arrayTest+4))));
当我使用 %d 时也是这样:
printf("%d ",ntohl(*((uint32_t *)(arrayTest+2)))); 的输出是“10”
printf("%d ",ntohl(*((uint16_t *)(arrayTest+4)))); 的输出是“655360”
为什么???
【问题讨论】:
-
您在此处调用 未定义的行为(通过这些指针转换取消引用)。
-
printf不是一个安全函数。使用时要小心谨慎。这包括reading the manual。 -
请注意,16 位数据有一个 ntohs() 函数,32 位数据有一个 ntohl() 函数。
-
谢谢你,它工作得很好。
标签: c arrays pointers uint32 uint16