BitConverter.ToInt16向Number添加0xFFFF? (C#)

时间:2010-11-08 04:43:49

标签: c# bitconverter

我在这里遇到了一个问题,可能是我只是忽略了一些问题,但我无法理解为什么会发生这种情况......

我遇到的问题是我正在使用位转换器从2字节数组中给我一个Int16,但出于某种原因,每当我这样做时 - 我得到的数字我应该得到,用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 个答案:

答案 0 :(得分:2)

0xA388是负Int16,因此转换为Int32将给出具有相似值的sign extended负int。你看到的0xFFFF是符号扩展(用'1'位填充)。更好地使用UInt16和UInt32。

答案 1 :(得分:0)

0xffffa388不是Int16。你确定你没有把它转换成某种32位类型吗?