Bitconverter.toint16 добавляет 0xffff на номер? (C #)
-
29-09-2019 - |
Вопрос
У меня здесь проблема, вероятно, что я просто с видом, но я не могу понять, почему это происходит ...
Проблема у меня есть, это то, что я использую битовый конвертер, чтобы дать мне 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-битный тип?