2012-03-12 202 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

当然 - 你需要摆脱“0X”的一部分,如果你想使用parseInt

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肯定会起作用,但是如果你已经知道基数,那么IMO就明确地陈述它,而不是推断它 - 特别是如果它让人们感到惊讶,将“035”视为八进制, 例如。当然,每种方法都适用于不同的时间,因此值得了解两者。选择最清楚,最清晰地处理您特定情况的人。

+1

没必要。看我的解决方案。 – Adam 2012-03-12 16:23:57

+1

@亚当:看我的编辑。 – 2012-03-12 16:36:53

1

Integer.parseInt只能解析格式化为像int一样的字符串。所以你可以解析“0”或“12343”或“-56”而不是“0x1”。

0

在你要求Integer类解析它之前,你需要从字符串的前面去掉0xparseInt方法期望传入的字符串只是指定基数的数字/字母。

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 2012-03-12 16:25:46

+0

那么数字格式是错误的,cuz java不识别他的0x1数字。 – engma 2012-03-12 16:27:57

+0

被问到的问题是如何转换字符串与0x前缀...不是没有... – Adam 2012-03-12 16:31:02

0

是的,Integer仍然期待某种字符串的数字。 x真的会搞砸了。

0

根据六角形的大小,您可能需要使用一个BigInteger(你大概可以跳过“L”检查,并在你的修剪;-)):

 // 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(); 
     }