我々はjava.lang.Integer.parseIntを使用して問題に遭遇した()J2MEのInteger.parseInt()は壊れていますか? J2MEのためのゲームを書いている間
私たちは、例えば、六角形の値として定義されているいくつかの定数値が設定されていますゲーム中
CHARACTER_RED = 0xFFAAA005;
値はシリアライズされ、ネットワーク接続を介して受信され、16進値の文字列表現として入力されます。バックint型にそれを解析するために、我々はunsuccesfully以下を試してみました:
// 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()が整数の誤った文字列表現に間違って動作することを期待していましたか?
編集:私の最初の投稿では、0xFFAAA005ではなく0xFFFAAA005を書きました。私はそれ以来、間違いを訂正しました。
広く使用されているツールがこのような基本的なバグを持っていると仮定するのは悪い考えです。あなたがそのことを推測したくなるときはいつでも、すべてのことを正しくやっていることを二重と三重にチェックするべきです。 –
私は本当にダウンボントを得ていません。それはよく書かれた質問だった。 –
+1なぜこれが下落したのか分かりません - それは正当な質問です。 –