Преобразуйте 2 байта в число

Я имею контроль, который имеет массив байтов в нем.

Время от времени существует два байта, которые говорят мне некоторую информацию о количестве будущих объектов в массиве.

Таким образом, как пример я мог иметь:

...
...
Item [4] = 7
Item [5] = 0
...
...

Значение этого равняется ясно 7.

Но что относительно этого?

...
...
Item [4] = 0
Item [5] = 7
...
...

Какая-либо идея о том, что это приравнивает к (как нормальный интервал)?

Я перешел к двоичному файлу и думал, что это может быть 11100000000, который равняется 1792. Но я не знаю, использует ли, именно так это действительно работает (т.е., это целые 8 объектов для байта).

Там какой-либо путь состоит в том, чтобы знать это с тестированием?

Примечание: Я использую C# 3.0 и Visual Studio 2008

10
задан Vaccano 17 April 2010 в 22:01
поделиться

4 ответа

BitConverter может легко преобразовать два байта в двухбайтовое целое число:

// assumes byte[] Item = someObject.GetBytes():
short num = BitConverter.ToInt16(Item, 4); // makes a short 
    // out of Item[4] and Item[5]
21
ответ дан 3 December 2019 в 13:47
поделиться

Вы говорите «это значение явно 7», но это полностью зависит от кодировки. Если мы предполагаем байты полной ширины, то в случае с прямым порядком байтов - да; 7, 0 равно 7. Но с прямым порядком байтов это не так.

Для обратного порядка байтов требуется

int i = byte[i] | (byte[i+1] << 8);

, а для обратного порядка байтов:

int i = (byte[i] << 8) | byte[i+1];

Но доступны и другие схемы кодирования; например, в некоторых схемах используется 7-битная арифметика с 8-м битом в качестве бита продолжения. Некоторые схемы (UTF-8) помещают все биты продолжения в первый байт (таким образом, в первом байте есть только ограниченное пространство для битов данных) и 8 бит для остальных в последовательности.

7
ответ дан 3 December 2019 в 13:47
поделиться

Двухбайтовое число имеет младший и старший байт. Старший байт стоит в 256 раз больше, чем младший:

value = 256 * high + low;

Таким образом, для high = 0 и low = 7 значение равно 7. Но для high = 7 и low = 0 значение становится 1792.

] Это, конечно, предполагает, что число является простым 16-битным целым числом. Если это что-то более интересное, вышеперечисленного будет недостаточно. Тогда вам нужно больше знаний о том, как кодируется число, чтобы его расшифровать.

Порядок, в котором появляются старший и младший байты, определяется порядком байтов байтового потока. При обратном порядке байтов вы увидите сначала высокое значение, а затем низкое (по более низкому адресу), а при обратном порядке байтов - наоборот.

11
ответ дан 3 December 2019 в 13:47
поделиться

Если эти байты являются «частями» целого числа, это работает следующим образом. Но будьте осторожны, порядок байтов зависит от платформы и также зависит от длины целого числа (16 бит = 2 байта, 32 бита = 4 байта, ...)

0
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: