为什么uint16_t没有显示所需的输出?

时间:2013-12-18 14:27:50

标签: c arrays pointers uint32 uint16

我有一个数组 -

uint8_t arrayTest[] = {
    0, 0xC1,                
    0, 0, 0, 0x0a,          
    0, 0, 0, 0x50           
 };

以下 printf uint32_t 显示正确的输出“ 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

为什么???

1 个答案:

答案 0 :(得分:1)

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