우리는 java.lang.Integer.parseInt를 사용하여 문제로 실행()J2ME의 Integer.parseInt()가 손상 되었습니까? J2ME를위한 게임을 쓰는 동안
우리는 예를 들어, 16 진수 값으로 정의 된 몇 가지 상수 값을 가지고 게임을하는 동안
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()가 정수의 16 진수 문자열 표현에 대해 잘못된 생각이 들었습니까?
편집 : 처음 게시 할 때 0xFFAAA005 대신 0xFFFAAA005를 썼습니다. 나는 그 실수를 바로 잡았습니다.
널리 사용되는 도구에 근본적인 버그가 있다고 가정하는 것은 바람직하지 않습니다. 당신이 그것을 생각하고 유혹을받을 때마다, 당신은 모든 일을 올바르게하고 있음을 두 배와 세 번 점검해야합니다. –
나는 downvotes을 정말로 얻지 않는다. 그것은 잘 쓰여진 질문이었습니다. –
+1 이유가 확실하지 않은 이유는 확실합니다. 합법적 인 질문입니다. –