首先发布在这里。我有一个从十六进制转换为十进制的赋值,包括其他转换,但这个让我感到困惑......
所以我需要转换的十六进制值是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--;
}
}
答案 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')
。