VB6 和 VB.NET 中短值的不同处理方式?
Different handling of Short values in VB6 and VB.NET?
我最近正在将一些 VB6 代码升级到 VB.NET。出现的一个奇怪问题是 short
数据类型的差异。
原来的VB6代码有如下一行:
foobar(&H8589)
其中 foobar
是一个接受一个 short
参数的函数。上面的代码在 VB6 中运行良好。目的是将两个字节传递给此函数,short
似乎是合适的数据类型,因为它代表 2 个字节。
升级后,代码突然returns错误Constant value not representable in type 'Short'.
所以我在MSDN, where it says:
中了解了这种数据类型
Holds signed 16-bit (2-byte) integers that range in value from -32,768 through 32,767.
所以让我们将 0x8589
转换为 DEC。显示为 -31,351
,完全在类型设置的边界内。现在,奇怪的是:当我使用 DEC 值 (foobar(-31351)
) 调用函数时 - 它起作用了!
所以你可能会问为什么我不直接使用 DEC 值。好吧,使用 HEX 的好处是每个查看代码的人都会立即知道传递了哪些字节,这在这种情况下很重要。
那么:为什么我不能使用 HEX 表示法?这种差异是否记录在某处?有没有一种方法可以在不更改函数的情况下使用 HEX 代码(例如接受两个 Byte
参数)?
要使用负十六进制 int16 常量,请在值前面加上 FFFF。在 vb.net.
中,十六进制常量似乎是 int32(至少)
dim w as int16
w = &HFFFF8589
我最近正在将一些 VB6 代码升级到 VB.NET。出现的一个奇怪问题是 short
数据类型的差异。
原来的VB6代码有如下一行:
foobar(&H8589)
其中 foobar
是一个接受一个 short
参数的函数。上面的代码在 VB6 中运行良好。目的是将两个字节传递给此函数,short
似乎是合适的数据类型,因为它代表 2 个字节。
升级后,代码突然returns错误Constant value not representable in type 'Short'.
所以我在MSDN, where it says:
Holds signed 16-bit (2-byte) integers that range in value from -32,768 through 32,767.
所以让我们将 0x8589
转换为 DEC。显示为 -31,351
,完全在类型设置的边界内。现在,奇怪的是:当我使用 DEC 值 (foobar(-31351)
) 调用函数时 - 它起作用了!
所以你可能会问为什么我不直接使用 DEC 值。好吧,使用 HEX 的好处是每个查看代码的人都会立即知道传递了哪些字节,这在这种情况下很重要。
那么:为什么我不能使用 HEX 表示法?这种差异是否记录在某处?有没有一种方法可以在不更改函数的情况下使用 HEX 代码(例如接受两个 Byte
参数)?
要使用负十六进制 int16 常量,请在值前面加上 FFFF。在 vb.net.
中,十六进制常量似乎是 int32(至少) dim w as int16
w = &HFFFF8589