J2ME 用のゲームを作成しているときに、java.lang.Integer.parseInt() を使用して問題に遭遇しました。
16 進値として定義されたいくつかの定数値があります。たとえば、次のようになります。
CHARACTER_RED = 0xFFAAA005;
ゲーム中、値はシリアル化され、ネットワーク接続を介して受信され、16 進値の文字列表現として受信されます。それを解析して int に戻すために、次のことを試みましたが失敗しました。
// Response contains the value "ffAAA005" for "characterId"
string hexValue = response.get("characterId");
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
次に、いくつかのテストを実行して、これを試しました:
string hexValue = Integer.toHexString(0xFFAAA005);
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
これは実際のコードからの例外です:
java.lang.NumberFormatException: ffaaa005
at java.lang.Integer.parseInt(Integer.java:462)
at net.triadgames.acertijo.GameMIDlet.startMIDlet(GameMIDlet.java:109)
これは私が認めなければならないことであり、私を当惑させました。parseInt コードを見ると、解析中の数値が「負/正の境界」を「超える」と NumberFormatException がスローされるようです (おそらく誰かがこれを正しい専門用語で編集できますか?)。
これは Integer.parseInt 関数の予想される動作ですか? 最終的には、独自の 16 進文字列解析関数を作成する必要があり、提供された実装に非常に不満を感じていました。
言い換えれば、Integer.parseInt() が整数の 16 進文字列表現で機能するという私の期待は見当違いでしたか?
編集: 最初の投稿では、0xFFAAA005 の代わりに 0xFFFAAA005 を書きました。それ以来、私はその間違いを修正しました。