在寫一個遊戲,J2ME,我們遇到了一個問題,使用java.lang.Integer.parseInt()J2ME的Integer.parseInt()是否被破壞?
我們定義爲十六進制值幾個固定值,例如:
CHARACTER_RED = 0xFFAAA005;
在遊戲中該值被序列化並通過網絡連接接收,並以十六進制值的字符串表示形式進入。爲了解析回一個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函數的預期行爲嗎?最後,我不得不編寫自己的十六進制字符串解析函數,而且我對所提供的實現非常不滿。
換句話說,我期望Integer.parseInt()對錯誤導出的整數的十六進制字符串表示有效嗎?
編輯:在我最初的發帖中,我寫了0xFFFAAA005而不是0xFFAAA005。我已經糾正了這個錯誤。
假設您使用的廣泛使用的工具有這樣一個基本錯誤,這是一個壞主意。每當你想要假設,你應該雙重和三重地檢查你是否做得正確。 – 2009-04-30 18:06:40
我並沒有真正得到讚揚。這是一個寫得很好的問題。 – 2009-04-30 18:07:52
+1我不知道爲什麼這是downvoted - 這是一個合法的問題。 – 2009-04-30 18:08:23