2017-08-07 26 views
2

作爲使用二進制和ASCII格式進行練習的一部分,我使用C程序將整數49寫入文件。二進制,其4個字節表示是文本編輯器中的反向排列順序

00000000 00000000 00000000 00110001

在ASCII,前3個字節是空字節(顯示爲^@),和最後一個字節是字符1。當我在vim中打開它時,我期望看到三個空字節,然後是1。相反,我看到它是相反的,即1後跟三個空字節。爲什麼這樣?

回答

2

這似乎是你的平臺是小端(所有x86是小端)存儲字節從低到高,所以49在內存中存儲爲

00110001 00000000 00000000 00000000 

,而不是你所期望的。


如果你想在你期望你需要使用使用htonl() function大端(又名網絡字節順序)將其保存的格式來顯示它。

+0

當我通過C代碼讀取整數時,無論存儲器的字節順序和佈局如何,它都能正確讀回49。我想當一個文本編輯器讀取它時,它只是顯示內存中的字節並且不知道字節順序。 – jitihsk

+1

不完全。如果你想在不同的endiannes機器上讀取你的整數,你會得到不同的結果。這就是爲什麼有定義的網絡字節順序,所以它可以在架構之間進行互操作。 – Hauleth