2017-11-14 11 views
1

SByteデータ型(バイナリinteropとファームウェアを伴う)の列挙型を定義しようとしています。私は以下のようなものを持っている:SByteで負の値に16進数を使用する

Public Enum Codes AS SByte 
    IDLE = &H0 
    IN_PROGRESS = &H1 
    DONE = &H2 

    SOME_ERROR = &H80 
    SOME_OTHER_ERROR = &H81 
End Enum 

は残念ながら2つのエラー・コードは、コンパイル時エラーになる:「定数式は、タイプに 『SByte』を表現できません」

明らかに、これらの値を整数として扱い、それをSByteに変換しようとしています。整数0x80 = 128として。SByteの範囲は[-128,127]なので、この値はSByteには大きすぎます。

- (& H80)を使用した場合、これが解決されます。しかし、これは-127の代わりに - (129)...

私はちょうどこれを回避するためにこれらの数字の小数表現を使用することができますが、私はこれを回避するために - & H81では動作しません。これは基本的なアセンブリコードと一貫しているので、16進数(VBの恐ろしい接頭辞でさえも)を使用することを好みます。

だから、誰かが16進数を使って負のSByte値の正しい構文を知っていれば、私はそれを感謝するだろう!

答えて

1

次のようなコードを入力した場合:

Dim sb as SByte = -127 

割り当てられた値は、リテラル整数(Int32)をと呼ばれています。同等の値を生成するために16進リテラル表記を使用する場合は、-127の16進値を使用する必要があります。

Dim sb as SByte = &HFFFFFF81 ' = -127 

あなたは補佐官のように型の接尾辞「S」

Dim sb as SByte = &HFF81S ' = -127 

を追加することによって、進値に短整数(Int16型)を読み取るようにコンパイラに指示している場合は、それを少し短くすることができます値の16進表記法を調べるには、VSの "immediate window"のVB Hex関数を使用して、入力する文字を決定することができます。 ?

すなわち: `ヘックス(-127)

が得られます: "FFFFFF81" を

関連する問題