2
作爲使用二進制和ASCII格式進行練習的一部分,我使用C程序將整數49寫入文件。二進制,其4個字節表示是文本編輯器中的反向排列順序
00000000 00000000 00000000 00110001
在ASCII,前3個字節是空字節(顯示爲^@
),和最後一個字節是字符1
。當我在vim中打開它時,我期望看到三個空字節,然後是1
。相反,我看到它是相反的,即1
後跟三個空字節。爲什麼這樣?
作爲使用二進制和ASCII格式進行練習的一部分,我使用C程序將整數49寫入文件。二進制,其4個字節表示是文本編輯器中的反向排列順序
00000000 00000000 00000000 00110001
在ASCII,前3個字節是空字節(顯示爲^@
),和最後一個字節是字符1
。當我在vim中打開它時,我期望看到三個空字節,然後是1
。相反,我看到它是相反的,即1
後跟三個空字節。爲什麼這樣?
這似乎是你的平臺是小端(所有x86是小端)存儲字節從低到高,所以49
在內存中存儲爲
00110001 00000000 00000000 00000000
,而不是你所期望的。
如果你想在你期望你需要使用使用htonl()
function大端(又名網絡字節順序)將其保存的格式來顯示它。
當我通過C代碼讀取整數時,無論存儲器的字節順序和佈局如何,它都能正確讀回49。我想當一個文本編輯器讀取它時,它只是顯示內存中的字節並且不知道字節順序。 – jitihsk
不完全。如果你想在不同的endiannes機器上讀取你的整數,你會得到不同的結果。這就是爲什麼有定義的網絡字節順序,所以它可以在架構之間進行互操作。 – Hauleth