将包含十六进制值的字节数组转换为十进制值
本文关键字:转换 数组 十进制 字节数 字节 包含 十六进制 | 更新日期: 2023-09-27 18:14:52
我正在制作c#应用程序。这里我想转换一个包含十六进制值到十进制值的字节数组。假设我有一个字节数组
array[0]=0X4E;
array[1]=0X5E;
array[2]=0X75;
array[3]=0X49;
这里我想将十六进制数组转换为十进制数,就像我想首先将所有字节值连接为4E5E7549,然后将该数字转换为十进制。我不想将每个单独的十六进制数字转换为十进制。该十六进制数的十进制等效值是1314813257。所以请帮帮我。
BitConverter。ToInt32方法是一个很好的方法
if (BitConverter.IsLittleEndian)
Array.Reverse(array); //need the bytes in the reverse order
int value = BitConverter.ToInt32(array, 0);
十六进制和十进制只是表示相同数据的不同方式你想要的是
int myInt = array[0] | (array[1] << 8) | (array[2] << 16) | (array[3] <<24)
下面是一个将包含十六进制数的字符串转换为十进制整数的方法:
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://learn.microsoft.com/de-de/dotnet/api/system.net.ipaddress.networktohostorder?redirectedfrom=MSDN&视图= netframework-4.7.2 # System_Net_IPAddress_NetworkToHostOrder_System_Int32_