我最近正在将一些VB6代码升级到VB.NET。出现的一个奇怪问题是short
数据类型的差异。在VB6和VB.NET中对短值进行不同的处理?
原始VB6码具有下面的行:
foobar(&H8589)
其中foobar
是接受一个short
参数的函数。上面的代码在VB6中工作正常。目的是将两个字节传递给该函数,short
似乎是一种适合的数据类型,因为它代表2个字节。
一旦升级,代码突然返回错误Constant value not representable in type 'Short'.
所以我在MSDN, where it says阅读有关此数据类型:
签署的保全16位(2字节),从-32,768到32,767范围内的值的整数。
所以我们将0x8589
转换为DEC。变为-31,351
,这在该类型设定的边界内。现在,奇怪的是:当我使用DEC值(foobar(-31351)
)调用函数时 - 它的工作原理!
所以你可能会问为什么我不会只使用DEC值。那么,使用HEX的好处是每个查看代码的人都能立即知道传递了哪些字节,在这种情况下哪些字节很重要。
所以:为什么我不能使用HEX表示法?这种差异记录在某处吗?有没有一种方法可以在不改变函数的情况下使用HEX代码(例如接受两个Byte
参数)?
H8589将整数转换为34185值。这超出了短数据类型的边界,这就是为什么你会遇到错误。 – Harsh
这听起来像你想要一个未签名的短。 – SLaks
@Harsh但用2个字节的宽度转换,结果为'-31351'。这似乎是VB6在内部所做的。我想知道它为什么会发生变化 - 升级引擎甚至没有留下评论,但它确实是不兼容的。 –