例如,如果你想在字节数组中表示5,它将是类似于{0x00,0x00,0x00,0x05}的smth,但是BitConverter给了我反转的数组({0x05,0x00,0x00,0x00})为什么是这样,我错了吗?
发布于 2011-12-03 16:06:01
很可能您使用的是小端架构(常见的x86和x86-64架构就是这种情况)。您可以使用BitConverter.IsLittleEndian属性验证这一点。在这样的体系结构中,最低有效字节首先出现,这就解释了为什么
BitConverter.GetBytes(5)产生
{ 0x05, 0x00, 0x00, 0x00 }当然,如果需要,您可以根据系统/目标字节顺序反转数组。您可以找到这样一个列出了EndianBitConverter的here。
发布于 2017-11-24 01:11:23
我编写了以下包装类来处理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);
}https://stackoverflow.com/questions/8366398
复制相似问题