字节数组十六进制转换为十进制

时间:2015-03-20 08:13:19

标签: c#

我有一个十六进制值的字节数组,例如:

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);

怎么了?

1 个答案:

答案 0 :(得分:3)

基本上您对endianness的理解是错误的 - 您的示例已经是的小端格式,所以如果BitConverter期望大,您应该只撤消它-endian 格式。你只需要改变你的状况:

if (!BitConverter.IsLittleEndian) Array.Reverse(b);

(我个人将if语句的正文放在大括号和新行中,但这是另一回事。)