十六进制到十进制转换问题

时间:2013-09-13 00:43:22

标签: java hex decimal

首先发布在这里。我有一个从十六进制转换为十进制的赋值,包括其他转换,但这个让我感到困惑......

所以我需要转换的十六进制值是12345678,2A3DF8A7,00FF00FF。 00FF00FF工作正常,这是给我带来麻烦的数字值。

我知道你应该将这个数字乘以16 ^ n,但由于某种原因,即使我认为我做得对,我也会得到太高的数值。显然不是因为它不起作用。非常感谢帮助!

我的代码在最后一小时内已经发生了变化,但是现在这是问题的最后一个“其他”。

public void toDec()
{
    dec = 0;
    for (int j = 0, i = 7; j < hex.length(); j++){

        if (hex.charAt(j) == 'A') {
            dec += (10 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'B') {
            dec += (11 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'C') {
            dec += (12 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'D') {
            dec += (13 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'E') {
            dec += (14 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == 'F') {
            dec += (15 * (int)Math.pow(16, i));
        }
        else if (hex.charAt(j) == '0') {
            dec = dec;
        }
        else {
            dec += ((int)hex.charAt(j)) * ((int)Math.pow(16, i));
        }
        i--;
    }
}

2 个答案:

答案 0 :(得分:0)

您的问题出在您的else子句中,处理数字1到9。

问题在于您将数字与代表它们的字符混淆。例如,数字1由字符'1'表示,其字符代码为49.因此,当您在else子句中将'1'字符强制转换为int时(即{ {1}}),你得到的是它的字符代码49,而不是1。

现在,解决这个问题的简单(和惯用)方法是对字符使用整数数学。例如,使用(int)hex.charAt(j)代替hex.charAt(j) - '0'。这是有效的,因为字符(int)hex.charAt(j)'0'被分配了连续的字符代码48到57,因此(例如)从字符代码中减去'9'(即48)的字符代码'0'(即49)返回实际数字值,自'1'起。同样适用于其他数字:49 - 48 = 1相当于'5' - '0',当然等于5。

更好的是,同样的方法也适用于其他十六进制字符!例如,如果执行53 - 48,则会得到结果'C' - 'A' + 10(这是字母C的十六进制值)。

答案 1 :(得分:0)

将char转换为int是问题 - 而不是int值,表示特定的数字,你得到char代码。 试试吧:System.out.println((int) '5');

最简单的解决方法是(hex.charAt(j) - '0')