-
- (質問者)
- 投稿時間:2009/07/02 11:35
はじめまして、以下のコードを書いて 16進数文字列"c2c80000"をInteger型にしたいと考えております。しかし、これをコンパイル、実行したら例外が発生してしまいました。コピペする ブログに貼るclass Test{ public static void main(String args[]){ float f = (float)(-100.0); //16進数にする String s = String.format("%08x", Float.floatToRawIntBits(f)); System.out.println(s); Integer i = Integer.valueOf(s,16); } }$ java Test c2c80000 Exception in thread "main" java.lang.NumberFormatException: For input string: "c2c80000" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:459) at java.lang.Integer.valueOf(Integer.java:526) at Test.main(Test.java:7)なにがいけないのでしょうか?
- 回答数 (2)
- クリップ数 (0)
- アクセス数 (2595)
- 回答
16進数文字列 "c2c80000" を Integer クラスにという質問ですが、java の Integer クラス ( int 型 ) で扱える最大値( 2の31乗-1, 16進数で 7fffffff ) よりも大きい数を表す文字列が Integer.valueOf(String s, int radix) に渡されているのが原因です。 一見すると c2c80000 はこれを2の補数表現とみなせば int 型の範囲に収まる数値と解釈することが可能なように見えます。しかし Integer.valueOf(String, int) においては負数について "-c2c8" といったように文字列の先頭に "-" (マイナス) をつけて渡されることを期待されているために、"c2c80000" という文字列が与えられた場合に、int 型で表現できる最大値を超えた表現が入力されたと判断されて、NumberFormatException 例外が発生したのではないでしょうか。
-
- (質問者)
- 2009/07/07 15:16
chonanさん回答ありがとうございます。"c2c80000" という文字列が与えられた場合に、int 型で表現できる最大値を超えた表現が入力されたと判断されて..なるほどそういう理由ですか すっきりしました。
3
回答
2
回答
2
回答
(2009/05/03 13:23)
by esqueue_light
2
回答
2
回答
2
回答
(2009/05/04 16:55)
by 2jitao
2
回答
(2009/05/19 11:55)
2
回答

