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

Java 十六进制到十进制转换问题,java,hex,decimal,Java,Hex,Decimal,第一个帖子在这里。我有一个从十六进制到十进制的转换任务,包括其他转换,但这一个让我很困惑 所以我需要转换的十六进制值是12345678,2A3DF8A7,00FF00FF。00FF00FF工作正常,是数值给我带来了麻烦 我知道你应该把这个数字乘以16^n,但由于某种原因,我得到的值太高了,尽管我认为我做得对。显然不是,因为它不起作用。非常感谢您的帮助 在过去的一个小时里,我的代码一直在修改,但现在问题出在最后一个“else”了 public void toDec() { dec = 0;

第一个帖子在这里。我有一个从十六进制到十进制的转换任务,包括其他转换,但这一个让我很困惑

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

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

在过去的一个小时里,我的代码一直在修改,但现在问题出在最后一个“else”了

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--;
    }
}
public void toDec()
{
dec=0;
对于(int j=0,i=7;j
您的问题在处理数字1到9的
else
子句中

问题是你把数字和代表它们的字符混淆了。例如,数字1由字符
'1'
表示,字符代码为49。因此,当您在else子句中将
'1'
字符转换为
int
(即
(int)hex.charAt(j)
)时,返回的是字符代码49,而不是1

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


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

这里的问题是将字符转换为int,而不是表示特定数字的int值,而是字符代码。 试一试:
System.out.println((int)'5')


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

只是一个注释。您可以通过使用
hex.length()-1-j
替换
i
变量来摆脱它。使它也适用于长度或长度小于8位的十六进制值…如果它只有8位,
Math.pow(16,i)
可以是
1非常感谢,我忘记了这个问题!我已经停止练习几个月了,像这样的小细节我肯定忘记了。。。再次非常感谢你!我不能提高投票率,因为代表人数太少。@user2774695:不用担心。很高兴能帮忙。