BinaryReader против байта [] + сдвиги - PullRequest
0 голосов
/ 15 ноября 2018

Я, должно быть, неправильно понимаю, что делает BinaryReader.Почему эти выходы отличаются?

{
    var data = File.ReadAllBytes(testFile);
    var pos = 0;
    var read8 = new Func<uint>(() => data[pos++]);
    var read32 = new Func<uint>(() => (read8() << 24) | (read8() << 16) | (read8() << 8) | read8());

    Console.WriteLine(read32());
}

using (var reader = new BinaryReader(File.Open(testFile, FileMode.Open)))
{
    Console.WriteLine(reader.ReadUInt32());
}

1 Ответ

0 голосов
/ 15 ноября 2018

* 1002 порядок байтов *.

Использование:

var read32 = new Func<uint>(() => (read8() | (read8() << 8) | (read8() << 16) | read8() << 24));

Обратите внимание: не пишите код с такими побочными эффектами.
Вам здесь сходит с рук, потому что порядок оценки гарантирован , но все же, пожалуйста, не.

...