2011-08-24 37 views
1

我對特定的BinaryReader操作感到困惑。BinaryReader.ReadInt32結果與輸入文件相比意外,爲什麼?

使用十六進制編輯器(UltraEdit)查看二進制文件時,前四個字節是:52 62 38 11

當在BinaryReader上迭代同一個文件時,如果我先調用ReadInt32(),我預計int值爲1,382,168,593。

.ReadInt32():從當前流中讀取一個4字節的帶符號整數,並將流的當前位置提前四個字節。

取而代之,我得到288,907,858。

顯然我錯過了一些明顯的東西......任何人都可以解釋發生了什麼?

回答

11

BinaryReader以little-endian順序讀取字節。

觀察:

csharp> 0x52623811; // What you expected it to read. 
1382168593 
csharp> 0x11386252; // What it actually read. 
288907858 

如果需要指定要讀取數據的字節順序,我建議使用Mono.DataConvert。我已經在幾個項目中使用過它,它非常有用,也是麻省理工學院許可的。 (由於性能原因,它使用不安全的代碼,所以不能在不可信的上下文中使用它。)

有關該概念的更多信息,請參閱the Wikipedia article on endianness

對BinaryReader在

實施