Преобразование байтового массива, содержащего шестнадцатеричные значения, в десятичные значения - PullRequest
4 голосов
/ 17 ноября 2011

Я делаю приложение в c #. Здесь я хочу преобразовать байтовый массив, содержащий шестнадцатеричные значения, в десятичные значения. Предположим, у меня есть один байтовый массив как

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

Здесь я хочу преобразовать этот шестнадцатеричный массив в десятичное число, как я хочу объединить сначала все байтовые значения как 4E5E7549, а после этого преобразовать это число в десятичное. Я не хочу преобразовывать каждое отдельное шестнадцатеричное число в десятичное. Десятичный эквивалент из этого шестнадцатеричного числа 1314813257. Так что, пожалуйста, помогите мне. Спасибо заранее.

Ответы [ 5 ]

8 голосов
/ 17 ноября 2011

Метод BitConverter.ToInt32 является хорошим способом сделать это

if (BitConverter.IsLittleEndian)
    Array.Reverse(array); //need the bytes in the reverse order
int value = BitConverter.ToInt32(array, 0);
1 голос
/ 17 ноября 2011

Вот метод преобразования строки, содержащей шестнадцатеричное число, в десятичное целое число:

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.

1 голос
/ 17 ноября 2011

шестнадцатеричное и десятичное - это просто разные способы представления одних и тех же данных, которые вы хотите получить, например

int myInt = array[0] | (array[1] << 8) | (array[2] << 16) | (array[3] <<24)
0 голосов
/ 22 августа 2018

Вместо того, чтобы проверять 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_

0 голосов
/ 17 ноября 2011

Следите за порядком байтов.

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