3

Normaly,例如,如果你想在字节数组中表示 5,它会像 {0x00,0x00,0x00,0x05} 但 BitConverter 给我反转数组({0x05,0x00,0x00,0x00})为什么会这样以及我在哪里我错了吗?

4

2 回答 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 回答