은 J2ME 의 정수입니다.parseInt()니다.
문제
는 동안 작성을 위해 게임 J2ME 습으로 java 를 사용하여.랭.정수입니다.parseInt()
우리는 여러 가지 상수 값으로 정의 진수 값을,예를 들어:
CHARACTER_RED = 0xFFAAA005;
게임을하는 동안 가치는 직렬화하고 받는 네트워크 연결을 통해,오는 문자열로 표현의 의 hex 값입니다.하기 위해서 분석은 그것을 다시 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 것 같을 때 발생 수는 분석되는"십자가"이"부정적인/긍정적인 경계"(아마 누군가가 편집할 수 있습에서 바로 전문 용어에 대한 이?).
이것이 예상한 행동을 위해 정수입니다.parseInt 기능입니까?결국 나는 내 자신을 쓰기 진열 분석 기능,그리고 나는 아주 불쾌하게 제공되는 구현합니다.
다시 말해서,내의 기대는 정수입니다.parseInt()에 대한 작업 진수 문자열 표현의 정수 잘못?
편집:내 초기 게시 내가 쓴 0xFFFAAA005 대신 0xFFAAA005.그 이후로 수정되었습니다.
해결책
이 String
당신은 분석은 너무 커서 int
.자바에서는, int
은 32 비트 데이터를 입력합니다.귀하의 문자열 이상 필요합 36 비트입니다.
귀하의(긍정적)값이 너무 커서 명 32-bit int
.
다른 팁
입력 (4289372165)이 int
(2147483647)?
값을 a로 구문 분석하십시오 long
그리고 선두를 다듬습니다 "0x"
구문 분석하기 전에 문자열에서 벗어납니다.
public class Program {
public static void main(String[] args) {
String input = "0xFFFAAA005";
long value = Long.parseLong(input.substring(2), 16);
System.out.print(value);
}
}
나는 Java Dev가 아니지만 Parseint는 정수와 만 작동한다고 생각합니다. 0xfffaaa005에는 9 개의 16 진수가 있으므로 int가 아니라 길다. 내 생각에 결과 데이터 유형보다 더 큰 숫자를 구문 분석 해달라고 요청했기 때문에 불평하고 있습니다.
당신의 번호는 int에 맞기에는 너무 커서 long.parselong ()을 대신 사용해보십시오. 또한 문자열에 0x가 있으면 문자열이 구문 분석되지 않는 것 같습니다.