我的String
包含十六进制数字"dddddddd"
,目前我正在使用方法int hex_to_int(String s)
将其转换为int decimalValue
:
public static int hex_to_int(String s)
{
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16*val + d;
}
return val;
}
当我执行int decimalValue = hex_to_int("dddddddd");
时,它会给我这个decimalValue -572662307
,而hexString "dddddddd"
应该是十进制的3722304989
。
我还试过int decimalValue = Integer.parseInt("dddddddd",16);
这给了我NumberFormatException
。
答案 0 :(得分:3)
3722304989
高于int变量可以保存的最大数。这就是你得到溢出的原因,结果变成了负面的。这也是Integer.parseInt("dddddddd",16)
抛出异常的原因。
如果您将val
变量和方法的返回类型更改为long,您将获得预期的结果。
您也可以使用Long.parseLong("dddddddd",16)
。
答案 1 :(得分:1)
你试过这个吗?
System.out.println(Long.parseLong("dddddddd", 16));
你会得到数字格式异常,因为转换后它会变为Integer的大值,尝试删除一个&#34; d&#34;它应该与Integer.parseInt一起使用或解析为Long,就像我上面给你看的那样。
答案 2 :(得分:1)
转换&#34; dddddddd&#34;的十六进制值超出了示例中使用的整数值范围的范围。下面的代码给出了正确的值:
包StackOverflow;
import java.util。*;
public class HexaToDecimal {
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.print("Provide Hexadecimal Input:");
Scanner userInput = new Scanner(System.in);
String inputValue = userInput.nextLine();
try
{
//actual conversion of hex to Decimal
Long outputDec = Long.parseLong(inputValue,16);
System.out.print("Decimal Equivalent : " +outputDec);
}
catch(NumberFormatException ne)
{
System.out.println("Invalid Input");
}
finally
{
userInput.close();
}
}
}