我在这里遇到了一个问题,可能是我只是忽略了一些问题,但我无法理解为什么会发生这种情况......
我遇到的问题是我正在使用位转换器从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。
有人会碰巧知道为什么会发生这种情况,以及纠正这种情况的方法吗?
答案 0 :(得分:2)
0xA388是负Int16,因此转换为Int32将给出具有相似值的sign extended负int。你看到的0xFFFF是符号扩展(用'1'位填充)。更好地使用UInt16和UInt32。
答案 1 :(得分:0)
0xffffa388不是Int16。你确定你没有把它转换成某种32位类型吗?