我写了一个java程序,应该将小数从1转换为256到十六进制,但问题出现在我尝试小数超过256之后,我开始得到不正确的结果.这是我的代码:
public class Conversion {
public static void main(String[] args) {
System.out.printf("%s%14s", "Decimal", "Hexadecimal");
for(int i = 1; i <= 300; i++) {
System.out.printf("%7d ", i);
decimalToHex(i);
System.out.println();
}
}
private static void decimalToHex(int decimal) {
int count;
if(decimal >= 256) {
count = 2;
} else {
count = 1;
}
for (int i = 1; i <= count; i++) {
if(decimal >= 256) {
returnHex(decimal / 256);
decimal %= 256;
}
if(decimal >= 16) {
returnHex(decimal / 16);
decimal %= 16;
}
returnHex(decimal);
decimal /= 16;
}
}
private static void returnHex(int number) {
switch(number) {
case 15:
System.out.print("F");
break;
case 14:
System.out.print("E");
break;
case 13:
System.out.print("D");
break;
case 12:
System.out.print("C");
break;
case 11:
System.out.print("B");
break;
case 10:
System.out.print("A");
break;
default:
System.out.printf("%d", number);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果的样本:
254 FE
255 FF
256 100
257 111
264 199
266 1AA
271 1FF
272 1100
273 1111
Run Code Online (Sandbox Code Playgroud)
注意:我刚刚开始学习java,所以如果可以,请保持简单.谢谢
See*_*ose 11
如果decimal小于比较值,您只是忘记打印出零值.显式打印出这些零时,您也不再需要count变量:
private static void decimalToHex(int decimal) {
if (decimal >= 256) {
returnHex(decimal / 256);
decimal %= 256;
} else {
System.out.print("0");
}
if (decimal >= 16) {
returnHex(decimal / 16);
decimal %= 16;
} else {
System.out.print("0");
}
returnHex(decimal);
decimal /= 16;
}
Run Code Online (Sandbox Code Playgroud)
当然,这也会改变小值的输出.它打印000,001,...
您应该使用此方法将十进制转换为十六进制
int i = ...
String hex = Integer.toHexString(i);
System.out.println("Hex value is " + hex);
Run Code Online (Sandbox Code Playgroud)
您可以在此链接上找到更多详细信息
http://www.javamex.com/tutorials/conversion/decimal_hexadecimal.shtml