При написании игры для J2ME мы столкнулись с проблемой, используя java.lang.Integer.parseInt()Является ли J2ME Integer.parseInt() сломанным?
У нас есть несколько постоянных значений, определенных как шестнадцатеричные значения, например:
CHARACTER_RED = 0xFFAAA005;
Во время игры значение сериализуется и принимается через сетевое соединение, входящее в виде строкового представления шестнадцатеричного значения. Для того, чтобы разобрать его обратно к междунар мы безуспешно пытались следующее:
// 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() работает с шестнадцатеричным представлением целого числа с ошибками?
EDIT: В моей первоначальной публикации я написал 0xFFFAAA005 вместо 0xFFAAA005. С тех пор я исправил эту ошибку.
Плохая идея предположить, что широко используемый инструмент, который вы используете, имеет такую фундаментальную ошибку. Всякий раз, когда у вас возникает соблазн предположить, что вы должны дважды и тройным образом проверить, что вы все делаете правильно. –
Я действительно не получаю downvotes. Это был хорошо написанный вопрос. –
+1 Я не уверен, почему это было приостановлено - это законный вопрос. –