我已经包装了一个dll方法,该方法在Web服务中有一个整数作为out参数。 在测试中,我发现当我期待-1时,我得到的是65,535。我意识到dll使用的是16位整数,我在代码中引用外部dll时指定了标准的.NET 32位整数。通过指定一个16位整数很快就可以解决这个问题。一切都很好。
我的问题是为什么会这样?如果我试图在16位整数中拟合一个32位整数,我可以理解发生溢出但是我不太确定为什么这会发生反过来。很明显,我对类型之间的类型铸造的理解有点缺乏,因此任何指导都会受到高度赞赏。
答案 0 :(得分:6)
16位整数“-1”设置全部16位。如果设置32位整数的低16位,则值为65,535。有关否定整数的内部表示的解释,请查看this article。
答案 1 :(得分:2)
这是因为类型转换。
你实际上并没有在调用堆栈上发送16位整数 - 它们仍然是32位。那么,完全返回的DLL是:
0x0000ffff
如果你将其转换为例如sint16
,这是-1
,但如果这是32位,则为65535
。