要写个程序,完成题目功能,要求不能通过十进制中转,直接从二进制转到十六进制,不准用API里的二进制转十六进制的方法.
输入的二进制当字符串输入.(我用的是BLUEJ,输入数据时总是按int接收.) 谢谢了!

解决方案 »

  1.   

    将32位二进制整数存入4×8的数组里。
    然后将每行的四个数按以下方法运算。
    a[0] = b[0][0]+(b[0][1]<<1)+(b[0][2]<<2)+(b[0][3]<<3);
    .
    .
    .
    依次类推,然后将得出的a[0..3]以16进制输出。
      

  2.   

    给你点思路:
    import java.util.HashMap;
    import java.util.Map;public class Test {
    private Map<String, String> binaryHexPairs; // 二进制, 十六进制对照表 public Test() {
    binaryHexPairs = new HashMap<String, String>();
    binaryHexPairs.put("0001", "1");
    binaryHexPairs.put("0010", "2");
    binaryHexPairs.put("0011", "3");
    binaryHexPairs.put("0100", "4");
    binaryHexPairs.put("0101", "5");
    binaryHexPairs.put("0110", "6");
    binaryHexPairs.put("0111", "7");
    binaryHexPairs.put("1000", "8");
    binaryHexPairs.put("1001", "9");
    binaryHexPairs.put("1010", "A");
    binaryHexPairs.put("1011", "B");
    binaryHexPairs.put("1100", "C");
    binaryHexPairs.put("1101", "D");
    binaryHexPairs.put("1110", "E");
    binaryHexPairs.put("1111", "F");
    } public String binaryToHex(String binaryString) {
    int prefixLen = (4 - binaryString.length() % 4) % 4;
    String prefix = "";
    for (int i = 0; i < prefixLen; ++i) {
    prefix += "0";
    }
    binaryString = prefix + binaryString; // 按四的倍数把二进制补齐, 不足的前面补0 // 四个二进制位转换成一个十六进制位
    StringBuilder sb = new StringBuilder("0x");
    for (int i = 0; i < binaryString.length(); i += 4) {
    sb.append(binaryHexPairs.get(binaryString.substring(i, i + 4)));
    } return sb.toString();
    } public static void main(String[] args) {
    Test t = new Test();
    // String binaryString = "101111";
    String binaryString = "1001100111011101010010101";
    System.out.println(t.binaryToHex(binaryString));
    }}
      

  3.   

    检查发现, 少了一个0的对, 加上去就可以了:
    binaryHexPairs.put("0000", "0");
      

  4.   

    感动得内牛满面啊,我之前想到了用MAP,但是老师和同学给的思路都是用字符串substring,charAt操作做,所以一直在字符串上纠结.有一个问题,关于前面补零的,int prefixLen = (4 - binaryString.length() % 4) % 4 看不懂,最后为什么要%4.为什么不直接用32-binaryString.length()呢.高手请轻拍.
      

  5.   

    如果用binaryString.length(),则在001 1101这种情况下,后面4位能正常求出16进制数,但前面3位001在map中却不是关键字,找不到对应的16进制值,要把001补齐为等值四位的 0001 才能找到对应的16进制的值。
      

  6.   

    明白了! 最后的%4是预防长度为4的整数倍的情况.
    我的332-binaryString.length() 补了太多零. 比如有14位,要补两个零,而不是补18个零.
    好人啊! 也谢谢楼上其他的朋友!
      

  7.   

    Long time no see Java.
    因为在招聘会上听人家公司忽悠说Java不行了。结果,几个月的时间就晃过去了。
    回头一看,还是Java好。