BinaryReader.ReadInt32 результат неожиданный по сравнению с входным файлом, почему? - PullRequest
1 голос
/ 25 августа 2011

Я озадачен определенной операцией BinaryReader.

При просмотре двоичного файла с помощью шестнадцатеричного редактора (UltraEdit) первые четыре байта: 52 62 38 11.

Когдаитерируя по тому же файлу с BinaryReader, если я сначала вызову ReadInt32(), я ожидаю, что значение int будет равно 1 382 168 593.

.ReadInt32(): считывает 4-байтовое целое число со знаком изтекущий поток и увеличивает текущую позицию потока на четыре байта.

Вместо этого я получаю 288 907 858.

Я явно упускаю что-то очевидное ... может кто-нибудь объяснить, чтопроисходит?

Ответы [ 2 ]

11 голосов
/ 25 августа 2011

BinaryReader читает байты в порядке с прямым порядком байтов.

Обратите внимание:

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

Если вам нужно указать порядок байтов данных, которые вы читаете, я бы предложил использовать Mono.DataConvert . Я использовал его в нескольких проектах, и он невероятно полезен, а также MIT-лицензирован. (Он использует небезопасный код по соображениям производительности, поэтому его нельзя использовать в ненадежных контекстах.)

См. статью Wikipedia по порядку байтов для получения дополнительной информации о концепции.

См. Справочный источник Microsoft для получения подробной информации о реализации BinaryReader

3 голосов
/ 25 августа 2011

Архитектура Intel little endian .Последний байт в последовательности имеет наибольшее значение.То есть 52 62 38 11 эквивалентно 0x11386252.

...