3

我已经包装了一个 dll 方法,它有一个整数作为 web 服务中的 out 参数。在测试中,我发现当我期待 -1 时,我得到了 65,535。我意识到 dll 使用的是 16 位整数,并且在我的代码中引用外部 dll 时我指定了标准的 .NET 32 位整数。通过指定一个 16 位整数很快就解决了这个问题,一切都很好。

我的问题是为什么会这样?如果我试图将 32 位整数放入 16 位整数中,我可以理解发生溢出,但我不太确定为什么会反过来发生这种情况。显然,我对类型之间的这种类型转换的理解有点缺乏,所以任何指导都将不胜感激。

4

2 回答 2

6

16 位整数“-1”设置了所有 16 位。如果设置 32 位整数的低 16 位,则值为 65,535。有关负整数的内部表示的解释,请查看这篇文章

于 2009-02-23T15:30:31.307 回答
2

这是由于类型转换而发生的。

您实际上并没有在调用堆栈上发送 16 位整数——它们仍然是 32 位的。所以 DLL 返回的确切内容是:

0x0000ffff

如果将其转换为 eg sint16,则为-1,但如果为 32 位,则为65535

于 2009-02-23T15:31:35.237 回答