2013-12-18 47 views
2

我有一個基於陣列uint16_t爲什麼不顯示所需的輸出?

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

所以下面的printfuint32_t的顯示正確的輸出 「一個」:

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))));輸出爲 「」

隨着printf("%d ",ntohl(*((uint16_t *)(arrayTest+4))));輸出爲 「」

爲什麼? ??

+0

[通常的積分轉換](http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-7-of -n)... –

+3

您在這裏調用**未定義的行爲**(通過這些指針轉換解除引用)。 –

+0

'printf'不是一個安全的功能。使用它時請小心謹慎。這包括[*閱讀手冊*](http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html)。 –

回答

1

nothl只有轉換32位數量。它會產生16位數量的不正確結果,至少在小端系統上。對此使用ntohs

相關問題