2009-10-21 3 views
2

나는 그것이 아닌 다른 변환하는 16 진수의 숫자 중 하나를 줄이면 그것을진수는 자바

int temp = Integer.parseInt("C050005C",16); 

을하려고 할 때 나는 숫자 형식의 예외를 얻고에서 숫자 형식의 예외를 int로. 왜 그리고 어떻게이 문제를 해결할 것인가?

답변

10

정수가 항상 Java로 서명되므로 정수 오버플로가 발생합니다.

  • 첫 번째 인수가 null인지, 길이 제로의 캐릭터 라인이다 다음 documentation of that method (강조 광산)에서 : 다음과 같은 상황이 발생하면

    유형 NumberFormatException의 예외가 발생합니다.

  • 기수가 Character.MIN_RADIX보다 작거나 Character.MAX_RADIX보다 큰 경우
  • 문자열의 모든 문자는 첫 번째 문자가 마이너스 기호가 될 수 있다는 것을 제외하고는, 지정된 기수의 숫자가 아닌는 '-'('\ u002d')가 문자열의 길이가보다 것을 제공 1.
  • 캐릭터 라인에 의해 나타내지는 값이 int 형의 값은 아니다.

그것은 하지만, 않은 부호있는 정수에 맞는 것입니다. 그러나 자바에서는 옵션이 없다.

그래서 여기에 당신의 최선의 방법이 사용하는 수를 long 후 바로 장기를 int로 그의 하위 4 바이트를 넣어 :

long x = Long.parseLong("C050005C", 16); 
int y = (int)(x & 0xffffffff); 

어쩌면 당신도 여기에 비트를 삭제 "와"수 있지만 지금은 테스트 할 수 없습니다. 하지만 그건

int y = (int)Long.parseLong("C050005C", 16); 
5

C050005C로 단축 할 수 이상의 Integer.MAX_VALUE입니다 3226468444 진수입니다. int에 맞지 않습니다.

2

부호있는 int 유형의 범위는 0x7FFFFFFF에서 -0x80000000입니다.

4

사용이 :

long temp = Long.parseLong("C050005C",16);