在写一个游戏,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