C# BitConverter problems
正常情况下,例如,如果要在字节数组中表示5,它将是类似于0x00,0x00,0x00,0x05的smth,但bitconverter给了我反向数组(0x05,0x00,0x00,0x00)为什么是这样?我哪里错了?
很可能您使用的是小endian体系结构(对于常见的x86和x86-64体系结构就是这样)。您可以使用
1 | BitConverter.GetBytes(5) |
生产
1 | { 0x05, 0x00, 0x00, 0x00 } |
当然,如果需要的话,可以根据系统/目标端序来反转数组。你可以在这里找到这样一个
我编写了以下包装器类来处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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); } |