2016-05-24 16 views
2

現在、16進文字列を符号付き整数としてその値に変換しようとしています。16進数への16進値

例:

0000000E - 14 
FFFFFFF2 - -14 

だから:符号なしの値に値を変換することは容易である:

print(tonumber("0000000E", 16)) // outputs 14 

負の値は次のように解析することができる。

num = tonumber("FFFFFFF2", 16) 
print(4294967296 - num - num) 

しかし残念ながら、I MSBがこれを動作させるように設定されているかどうかを検出する必要があります。 私のluaの実装がBit-Libraryをサポートするなら、これは簡単でしょうが、残念なことにそうではありません。

So:どのようにして符号付き16進整数をLUA番号に変換できますか?

+1

オリジナルの16進数文字列から最上位バイトが '8 F'の範囲内にある場合だけチェックするからあなたを停止しますか? –

+1

または、符号なしの値が2^31-1より大きいかどうかを確認する。 – siffiejoe

+2

符号付き番号を取得するには、num =(tonumber( "FFFFFFF2"、16)+ 2^31)%2^32-2^31'を使用します。今度は 'num <0'をチェックするだけです –

答えて

1

最良の答えは、コメントからEgorで、おそらくです:

num = (tonumber("FFFFFFF2", 16) + 2^31) % 2^32 - 2^31