我正在尝试使用SByte数据类型定义枚举(对于带有一些附带固件的二进制互操作)。我有类似下面的内容:
Public Enum Codes AS SByte
IDLE = &H0
IN_PROGRESS = &H1
DONE = &H2
SOME_ERROR = &H80
SOME_OTHER_ERROR = &H81
End Enum
不幸的是,这两个错误代码导致编译时错误:“常量表达式在'SByte'类型中无法表示。”
显然,它首先尝试将这些值视为整数,然后将它们转换为SByte。整数0x80 = 128.由于SByte的范围是[-128,127],因此该值对于SByte而言太大。
如果我使用 - (& H80),这就解决了。但是,这不适用于 - & H81,因为它转换为 - (129)而不是-127 ....
我可以使用这些数字的十进制表示来解决这个问题,但我更喜欢使用十六进制(即使使用VB的可怕前缀),因为这与底层汇编代码一致。
所以...如果有人知道使用十六进制的负SByte值的正确语法,我会很感激!
答案 0 :(得分:1)
输入以下代码时:
Dim sb as SByte = -127
指定的值称为整数(Int32)文字。如果使用十六进制文字表示法来生成等效值,则必须使用十六进制值-127。
Dim sb as SByte = &HFFFFFF81 ' = -127
如果指示编译器通过附加类型后缀字符“S”来读取十六进制值为短整数(Int16),则可以缩短一点
Dim sb as SByte = &HFF81S ' = -127
作为确定值的十六进制表示法的助手,您可以使用VS的“即时窗口”中的VB Hex
函数来确定要输入的字符。
即:`?Hex(-127)
将产生:“FFFFFF81”