BinaryReader 与 byte[]+shifts
BinaryReader vs byte[]+shifts
我一定是误解了 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());
}
使用:
var read32 = new Func<uint>(() => (read8() | (read8() << 8) | (read8() << 16) | read8() << 24));
附带说明一下,请不要编写带有此类副作用的代码。
因为 the order of evaluation is guaranteed,你在这里逃脱了他们,但仍然请不要。
我一定是误解了 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());
}
使用:
var read32 = new Func<uint>(() => (read8() | (read8() << 8) | (read8() << 16) | read8() << 24));
附带说明一下,请不要编写带有此类副作用的代码。
因为 the order of evaluation is guaranteed,你在这里逃脱了他们,但仍然请不要。