java中的十六进制到十进制转换

时间:2014-11-07 11:19:42

标签: java

我的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

3 个答案:

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

}