Я имею контроль, который имеет массив байтов в нем.
Время от времени существует два байта, которые говорят мне некоторую информацию о количестве будущих объектов в массиве.
Таким образом, как пример я мог иметь:
... ... Item [4] = 7 Item [5] = 0 ... ...
Значение этого равняется ясно 7.
Но что относительно этого?
... ... Item [4] = 0 Item [5] = 7 ... ...
Какая-либо идея о том, что это приравнивает к (как нормальный интервал)?
Я перешел к двоичному файлу и думал, что это может быть 11100000000, который равняется 1792. Но я не знаю, использует ли, именно так это действительно работает (т.е., это целые 8 объектов для байта).
Там какой-либо путь состоит в том, чтобы знать это с тестированием?
Примечание: Я использую C# 3.0 и Visual Studio 2008
BitConverter
может легко преобразовать два байта в двухбайтовое целое число:
// assumes byte[] Item = someObject.GetBytes():
short num = BitConverter.ToInt16(Item, 4); // makes a short
// out of Item[4] and Item[5]
Вы говорите «это значение явно 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 бит для остальных в последовательности.
Двухбайтовое число имеет младший и старший байт. Старший байт стоит в 256 раз больше, чем младший:
value = 256 * high + low;
Таким образом, для high = 0 и low = 7 значение равно 7. Но для high = 7 и low = 0 значение становится 1792.
] Это, конечно, предполагает, что число является простым 16-битным целым числом. Если это что-то более интересное, вышеперечисленного будет недостаточно. Тогда вам нужно больше знаний о том, как кодируется число, чтобы его расшифровать.
Порядок, в котором появляются старший и младший байты, определяется порядком байтов байтового потока. При обратном порядке байтов вы увидите сначала высокое значение, а затем низкое (по более низкому адресу), а при обратном порядке байтов - наоборот.
Если эти байты являются «частями» целого числа, это работает следующим образом. Но будьте осторожны, порядок байтов зависит от платформы и также зависит от длины целого числа (16 бит = 2 байта, 32 бита = 4 байта, ...)