2012-03-12 6 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; 

負の数値もどのように表現されるか考えるべきであることに注意してください。

EDIT:decodeを使用しているアダムの解は確かにうまくいくでしょうが、あらかじめ基数を知っていれば、明示的に明示するのが明白です - 特に "035"が8進数として扱われる、 例えば。もちろん、それぞれの方法はさまざまな時期に適切です。したがって、両方について知る価値があります。特定の状況を最もきれいにかつ明確に処理するものを選んでください。

+1

を。私の解決策を見てください。 – Adam

+1

@Adam:私の編集を参照してください。 –

1

Integer.parseIntは、intのように書式設定された文字列のみを解析できます。したがって、 "0"または "12343"または "-56"は解析できますが、 "0x1"は解析できません。

0

文字列の先頭から0xを取り除いてから、Integerクラスに解析を依頼する必要があります。 parseIntメソッドでは、渡される文字列は、指定された基数の数字/文字のみになると想定しています。

4

0xプレフィックスが許可されていないためです。これはJava言語のものです。

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

あなたは0xのが、整数で利用できる.decodeメソッドを使用してリードして文字列を解析したい場合は、ロングなど

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(); 
     } 
関連する問題