我有一个十六进制值的字节数组,例如:
var b = new byte[] {0x27, 0x01, 0x00, 0x00};
我需要将其转换为十进制值,但是当我使用下面的代码时,会得到意想不到的结果。 预计为295,但结果为654376960。
if (BitConverter.IsLittleEndian) Array.Reverse(b);
//int myInt = b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
int value = BitConverter.ToInt32(b, 0);
怎么了?
答案 0 :(得分:3)
基本上您对endianness的理解是错误的 - 您的示例已经是的小端格式,所以如果BitConverter
期望大,您应该只撤消它-endian 格式。你只需要改变你的状况:
if (!BitConverter.IsLittleEndian) Array.Reverse(b);
(我个人将if语句的正文放在大括号和新行中,但这是另一回事。)