2012-03-12 4 views
2

이처럼 int로 변환하려고하는데 예외가 생깁니다.java를 int로 변환합니다.

String strHexNumber = "0x1"; 
    int decimalNumber = Integer.parseInt(strHexNumber, 16); 
    Exception in thread "main" java.lang.NumberFormatException: For input string: "0x1" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Integer.parseInt(Integer.java:458) 

누군가가 문제를 해결할 수 있다면 큰 도움이됩니다.

감사합니다. -

답변

4

물론 당신이 parseInt 사용하려는 경우 당신이 "0X"부분을 제거해야합니다 당신의 값이 시작됩니다 알고 경우

int parsed = Integer.parseInt("100", 16); 
System.out.println(parsed); // 256 

을 "0X"당신은 사용할 수 있습니다

그것을 위해
String prefixStripped = hexNumber.substring(2); 

그렇지 않으면, 단지 시험 :

number = number.startsWith("0x") ? number.substring(2) : number; 

음수가 어떻게 표현되는지 생각해야합니다.

편집 : decode을 사용하는 Adam의 솔루션은 확실히 작동하지만 기수를 이미 알고있는 경우 유추하는 것보다 명시 적으로 명시하는 것이 명확합니다. 특히 "035"가 8 진수로 처리되는 것을 놀라게하는 경우 예를 들면. 물론 각각의 방법은 서로 다른시기에 적절하기 때문에 두 가지를 모두 알고 있어야합니다. 특정 상황을 가장 깨끗하고 명확하게 처리하는 것을 선택하십시오.

+1

합니다. 내 솔루션을 참조하십시오. – Adam

+1

@Adam : 편집을 참조하십시오. –

1

Integer.parseInt는 int처럼 보이도록 형식화 된 문자열 만 구문 분석 할 수 있습니다. 따라서 "0"또는 "12343"또는 "-56"을 파싱 할 수 있지만 "0x1"은 파싱 할 수 없습니다.

0

Integer 클래스에 구문 분석을 요청하기 전에 문자열 앞에서 0x을 제거해야합니다. parseInt 메서드는 전달 된 문자열이 지정된 기수의 숫자/문자만으로 간주합니다.

4

0x 접두사를 사용할 수 없기 때문입니다. 자바 언어 일뿐입니다. 당신이 0X 다음 등 정수, 긴에서 사용할 수있는 .decode 방법을 사용 선도 문자열을 구문 분석하려면

String strHexNumber = "F777"; 
int decimalNumber = Integer.parseInt(strHexNumber, 16); 
System.out.println(decimalNumber); 

int value = Integer.decode("0x12AF"); 
System.out.println(value); 
0

여기에이 코드를 사용해보십시오 : -

import java.io.*; 
import java.lang.*; 

public class HexaToInteger{ 

    public static void main(String[] args) throws IOException{ 

    BufferedReader read = 

    new BufferedReader(new InputStreamReader(System.in)); 

    System.out.println("Enter the hexadecimal value:!"); 

    String s = read.readLine(); 

    int i = Integer.valueOf(s, 16).intValue(); 

    System.out.println("Integer:=" + i); 

    } 

} 
+0

Integer.valueOf ("0x1", 16)는 NumberFormatException을 던집니다 ... – Adam

+0

그렇다면 숫자 형식이 잘못되었습니다. cuz java는 그의 0x1 숫자를 인식하지 못합니다. – engma

+0

질문은 0x 접두사가있는 문자열을 변환하는 방법입니다. – Adam

0

그래, Integer는 여전히 일종의 문자열을 기대하고있다. 그 x는 정말 물건을 엉망이 될 것입니다.

0

육각의 크기에 따라, 당신은 (당신은 아마 ;-)은 "L"체크를 생략하고 당신에자를 수) 인 BigInteger를 사용해야 할 수도 있습니다 : 불필요

 // Convert HEX to decimal 
     if (category.startsWith("0X") && category.endsWith("L")) { 
      category = new BigInteger(category.substring(2, category.length() - 1), 16).toString(); 
     } else if (category.startsWith("0X")) { 
      category = new BigInteger(category.substring(2, category.length()), 16).toString(); 
     } 
관련 문제