附件为本人代码,测试结果,大神指点下我的思路错在哪里,能给我个优化的方案就更好了。
public class Exercise9_9 {
public static String binaryToHex(String binaryString){ //二进制转16进制
int count = binaryString.length();
int decimalValue = binaryToDecimal(binaryString); //转为十进制
char[] num = new char[count/4];
int temp,temp1;
int i=0;
while(decimalValue/16>=0){ //十进制转十六进制输出
temp1 = decimalValue%16; //比较笨不知道怎么优化,高手请指教
if(temp1 == 10) //我也试过二进制4位转一位16进制数的算法也没能弄出正确答案。。。。
num[i] = 'A'; //最后决定用最这个贴出来的代码做
if(temp1 == 11)
num[i] = 'B';
if(temp1 == 12)
num[i] = 'C';
if(temp1 == 13)
num[i] = 'D';
if(temp1 == 14)
num[i] = 'E';
if(temp1 == 15)
num[i] = 'F';
if(temp1 == 0)
num[i] = '0';
if(temp1 == 1)
num[i] = '1';
if(temp1 == 2)
num[i] = '2';
if(temp1 == 3)
num[i] = '3';
if(temp1 == 4)
num[i] = '4';
if(temp1 == 5)
num[i] = '5';
if(temp1 == 6)
num[i] = '6';
if(temp1 == 7)
num[i] = '7';
if(temp1 == 8)
num[i] = '8';
if(temp1 == 9)
num[i] = '9';
i++;
decimalValue = decimalValue/16;
}
return num.toString();
}
public static int binaryToDecimal(String binary){ //二进制转十进制
int count = binary.length();
int sum = 0;
for(int i=0;i<count;i++){
if(binary.charAt(i) == '1')
sum += Math.pow(2, i);
}
return sum;
}
public static void main(String[] args){
java.util.Scanner string = new java.util.Scanner(System.in);
System.out.println("Enter binaryValue:");
String str = string.nextLine();
System.out.println("The hexdecimal value is " + binaryToHex(str));
System.out.println("The decimal value is " + binaryToDecimal(str));
}
}
Enter binaryValue:
1111111111
The hexdecimal value is [C@e66f56
The decimal value is 1023
------解决思路----------------------
另外,Java提供了进制转换函数:Integer.toString(int i, int radix)
这个方法可以用来转换进制
------解决思路----------------------
代码中的num.toString()的返回值就是你所谓的乱码,因为num是数组,除非覆盖默认的toString方法,否则返回的是getClass().getName() + "@" + Integer.toHexString(hashcode());