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