BitConverter.ToInt16 Добавляет 0xFFFF к числу?(С #) - PullRequest
0 голосов
/ 08 ноября 2010

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

Проблема, с которой я столкнулся, заключается в том, что я использую битовый преобразователь, чтобы дать мне 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);

Возвращается, когда CreationDate равно 0x3d67 (правильно), но CreationTime равно 0xffffa388.

Может кто-нибудь узнать, почему это происходит, и как это исправить?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2010

0xA388 является отрицательным Int16, поэтому преобразование в Int32 даст расширенный знак отрицательное int с аналогичным значением.То, что вы видите 0xFFFF, является расширением знака (заполнение битами «1»).Лучше использовать UInt16 и UInt32.

0 голосов
/ 08 ноября 2010

0xffffa388 не является Int16. Вы уверены, что не преобразуете его в какой-нибудь 32-битный тип?

...