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

时间:2011-11-17 12:01:43

标签: c# arrays hex byte decimal

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

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

这里我想将十六进制数组转换为十进制数,就像我想要将所有字节值连接为4E5E7549并将该数字转换为十进制之后。我不希望将每个单独的十六进制数转换为十进制数。十进制等效值那个十六进制数是1314813257.So请帮帮我。谢谢。

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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。

答案 3 :(得分:0)

注意字节顺序。

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

答案 4 :(得分:0)

您可以使用IsLittleEndian来代替自己检查IPAddress.NetworkToHostOrder(value)

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_