我在这里有一个问题,这可能是我刚刚忽略的事情,但是我不明白为什么会发生...

我遇到的问题是,我正在使用位转换器从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(正确),但创建时间为0xffffa388。

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

有帮助吗?

解决方案

0xa388是负INT16,因此转换为INT32将提供一个 签名扩展 负int具有相似的值。您看到的0xffff是符号扩展名(带有'1'位的填充)。更好地使用UINT16和UINT32。

其他提示

0xffffa388不是INT16。您确定您不会将其投入到32位类型上吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top