Вопрос

У меня здесь проблема, вероятно, что я просто с видом, но я не могу понять, почему это происходит ...

Проблема у меня есть, это то, что я использую битовый конвертер, чтобы дать мне int16 из 2-байтового массива, но по какой-то причине, когда я это делаю - я получаю номер, который я должен получить, с 0xffff добавлен в начало номера.

Пример...

byte[] ourArray = { 0x88, 0xA3, 0x67, 0x3D };
Int16 CreationDate = BitConverter.ToInt16(new byte[] {ourArray[2], ourArray[3]} , 0);
Int16 CreationTime = BitConverter.ToInt16(new byte[] {ourArray[0], ourArray[1]}, 0);

Это вернется с «VesttreatDate», являющимся 0x3D67 (правильным), но время создания 0xFFFFA388.

Любой, кто будет знать, почему это происходит, и способ исправить это?

Это было полезно?

Решение

0xa388 - отрицательный INT16, поэтому преобразован в INT32, даст знак расширены отрицательный int с аналогичным значением. Это 0xFFFF, вы видите, является расширение знака (прокладки с 1 'битами). Лучше использовать UINT16 и UINT32.

Другие советы

0xFFFFA388 не является INT16. Вы уверены, что не бросаете его на 32-битный тип?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top