2015-03-20 5 views
0

У меня есть массив с шестнадцатеричных значений, например:Преобразование массива байтов шестнадцатеричной в десятичную

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

Что случилось?

+0

'decimal' это конкретные данные введите .NET (технически 'System.Decimal') и конкретный (и тот же) тип данных в C#. Вы ищете 'int' /' System.Int32' – xanatos

ответ

3

В основном ваше понимание endianness неправильно - ваш пример в прямом порядке байт уже, так что вы должны только повернуть его вспять, если BitConverter ожидает формат с большими обратным порядком байт. Вам просто нужно инвертировать условие:

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

(я бы лично поставил тело, если заявление в фигурных скобках и новых линий, но это совсем другое дело.)

Смежные вопросы