Normaly,例如,如果你想在字节数组中表示 5,它会像 {0x00,0x00,0x00,0x05} 但 BitConverter 给我反转数组({0x05,0x00,0x00,0x00})为什么会这样以及我在哪里我错了吗?
问问题
1553 次
2 回答
3
奇怪的是,您使用的是 little-endian 架构(常见的 x86 和 x86-64 架构就是这种情况)。BitConverter.IsLittleEndian
您可以使用该属性验证这一点。在这样的架构上,最低有效字节排在第一位,这就解释了为什么
BitConverter.GetBytes(5)
生产
{ 0x05, 0x00, 0x00, 0x00 }
如果需要,您当然可以根据系统/目标字节序反转数组。您可以在此处找到此类EndianBitConverter
列表。
于 2011-12-03T08:06:00.580 回答
0
我编写了以下包装类来处理BitConverter
预期的 Little Endien 的情况。
public static Int16 ToInt16(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt16(data, offset);
}
public static Int32 ToInt32(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt32(data, offset);
}
public static Int64 ToInt64(byte[] data, int offset)
{
if (BitConverter.IsLittleEndian)
{
return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0);
}
return BitConverter.ToInt64(data, offset);
}
于 2017-11-23T17:11:22.740 回答