在为 J2ME 编写游戏时,我们遇到了使用 java.lang.Integer.parseInt() 的问题
我们有几个常量值定义为十六进制值,例如:
CHARACTER_RED = 0xFFAAA005;
在游戏过程中,该值被序列化并通过网络连接接收,以十六进制值的字符串表示形式出现。为了将其解析回 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 函数的预期行为吗?最后我不得不编写自己的十六进制字符串解析函数,我对提供的实现非常不满意。
换句话说,我期望 Integer.parseInt() 在整数的十六进制字符串表示上工作被误导了吗?
编辑:在我最初的帖子中,我写了 0xFFFAAA005 而不是 0xFFAAA005。我已经纠正了这个错误。