使用带有SByte的十六进制作为负值

时间:2017-11-14 03:16:56

标签: .net vb.net hex

我正在尝试使用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值的正确语法,我会很感激!

1 个答案:

答案 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”