【问题标题】:Using Hex with SByte for Negative Values将十六进制与 SByte 一起用于负值
【发布时间】:2026-01-27 06:20:04
【问题描述】:

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

【问题讨论】:

    标签: .net vb.net hex


    【解决方案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”

    【讨论】:

      最近更新 更多