どういうわけか、私はブレインファートを持っていて、適切なビッグエンディアンとリトルエンディアンの表現を理解できません。32ビット整数が格納されているバイトストリームがあります。
整数は10進数の1000で、16進数の0x03E8です。リトルエンディアンでは、これはE8 03
2バイトとして表される場合と同じように格納されます。
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メソッドによって返される配列内のバイトの順序は、コンピューターアーキテクチャがリトルエンディアンかビッグエンディアンかによって異なります。
それで、私はリトルエンディアンがどのように機能するかを誤解していますか、BitConverterが壊れていますか、それとも何か間違ったことをしますか?