0

我在这里遇到了一个问题,这可能是我忽略的问题,但我不明白为什么会这样......

我遇到的问题是我正在使用位转换器从 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。

有人会碰巧知道为什么会发生这种情况,以及纠正这种情况的方法吗?

4

2 回答 2

2

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

于 2010-11-08T04:48:31.813 回答
0

0xffffa388 不是 Int16。您确定您没有将其转换为某种 32 位类型吗?

于 2010-11-08T04:46:21.327 回答