不知何故,我脑子有问题,无法弄清楚正确的大端和小端表示。我有一个存储 32 位整数的字节流。
Integer 是十进制的 1000,即十六进制的 0x03E8。在 little Endian 中,这将被存储为E8 03
当表示为两个字节时。
我假设如果我想要 4 字节填充,它将存储为00 00 E8 03
. 然而,当我使用 BitConverter 时,我得到了奇怪的结果:
// true
Console.WriteLine(BitConverter.IsLittleEndian);
var bytes = new byte[4] { 0x00, 0x00, 0xE8, 0x03 };
var convertedInt = BitConverter.ToInt32(bytes,0);
// 65536000 ?!
Console.WriteLine(convertedInt);
var inputInt = 1000;
var convertedBytes = BitConverter.GetBytes(inputInt);
// 4 Bytes: e8 03 00 00
Console.WriteLine("{0} Bytes: {1:x2} {2:x2} {3:x2} {4:x2}", convertedBytes.Length,
convertedBytes[0], convertedBytes[1],
convertedBytes[2], convertedBytes[3]);
这看起来像 BitConverter 坏了。文档清楚地说:
GetBytes 方法返回的数组中的字节顺序取决于计算机体系结构是 little-endian 还是 big-endian。
那么,我是否误解了 Little Endian 的工作原理,BitConverter 是否损坏,或者我做错了什么?