2013-03-04 32 views
11

16進数の16ビット値を表すJava文字列があります。この文字列は、"0000""FFFF"のいずれかで指定できます。16ビット16進数の文字列をJavaで符号付き整数に変換する

私はInteger.parseInt("FFFF",16)を使用して整数に変換します。ただし、符号なしの値(65535)が返されます。

符号付きの値を返すようにします。この特定の例では、"FFFF"-1を返します。

どうすればこの問題を解決できますか?私はShort.parseShort("FFFF",16)を使用すると思ったが、それは16ビット値なので、範囲外です。私はparseShort()が負の符号を期待していると思います。

答えて

13

あなたはintをキャストすることができますが、短いへInteger.parseInt()から返さ:

short s = (short) Integer.parseInt("FFFF",16); 
System.out.println(s); 

結果:

-1 
+0

@AndreasFesterを試しに、なぜこれが短いなど、さらにキャストを必要としません? – Rachael

+2

@Rachael 'Integer.parseInt'によって返される値は、(0x4FF)の' int'値( '0xFFFF')のため、' 65535'です。これを「short」に割り当てることによって、上位16ビットは効果的に破棄され、ビット15は短値の符号ビットとして取り込まれ、結果として「-1」(すべてのビットは1)となる。キャストはキャストなしで、コンパイラはintからshortへの可能性のある変換の可能性について文句を言います。 –

+0

@AndreasFesterその素晴らしい説明に感謝します。 – Rachael

2

int i = (short) Integer.parseInt("FFFF", 16); 
+0

助けてくれてありがとう! – Dimme

関連する問題