将包含hex值的字节数组转换为十进制值

我在c#中进行应用。我想将包含hex值的字节数组转换为十进制值。假设我有一个字节数组作为

array[0]=0X4E; array[1]=0X5E; array[2]=0X75; array[3]=0X49; 

在这里,我想将hex数组转换为十进制数,就像我想要将所有字节值连接为4E5E7549并在该数字转换为十进制之后。我不想将每个单独的hex数转换为十进制。该hex的十进制等值号码是1314813257。所以请帮帮我。谢谢。

BitConverter.ToInt32方法是一种很好的方法

 if (BitConverter.IsLittleEndian) Array.Reverse(array); //need the bytes in the reverse order int value = BitConverter.ToInt32(array, 0); 

hex和十进制只是表示您想要的相同数据的不同方式

 int myInt = array[0] | (array[1] << 8) | (array[2] << 16) | (array[3] <<24) 

这是一个将包含hex数的字符串转换为十进制整数的方法:

 private int HexToDec(string hexValue) { char[] values = hexValue.ToUpperInvariant().ToCharArray(); Array.Reverse(values); int result = 0; string reference = "0123456789ABCDEF"; for (int i = 0; i < values.Length; i++) result += (int)(reference.IndexOf(values[i]) * Math.Pow(16d, (double)i)); return result; } 

然后,您可以将各个部分串在一起并将它们传递给此函数以获取十进制值。 如果您使用的是非常大的值,则可能需要从int更改为ulong。

注意字节顺序。

 int num = array[0] << 8 * 3 | array[1] << 8 * 2 | array[2] << 8 * 1 | array[3] << 8 * 0; 

您可以使用IPAddress.NetworkToHostOrder(value) ,而不是自己检查IsLittleEndian

 int value = BitConverter.ToInt32(array, 0); value = IPAddress.NetworkToHostOrder(value); 

看更多:

https://docs.microsoft.com/de-de/dotnet/api/system.net.ipaddress.networktohostorder?redirectedfrom=MSDN&view=netframework-4.7.2#System_Net_IPAddress_NetworkToHostOrder_System_Int32_