2

我有一个数组-

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 ”

为什么???

4

1 回答 1

1

nothl仅用于转换 32 位数量对于 16 位数量,它会产生不正确的结果,至少在小端系统上是这样。为此使用ntohs

于 2013-12-18T16:07:36.857 回答