bitConverter.toint16将0xffff添加到编号? (C#)
-
29-09-2019 - |
题
我在这里有一个问题,这可能是我刚刚忽略的事情,但是我不明白为什么会发生...
我遇到的问题是,我正在使用位转换器从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位类型上吗?
不隶属于 StackOverflow