一个二进制串
String binary="1010101010101000111000011111001110";
String hex=Integer.toHexString(Integer.valueOf(binary,0));
问题是如果binary的长度大于31位,下面就会报错,原因应该是Integer.toHex....这个Integer的位数是32位的,所以大于这个数会报错,那我要解快这个问题怎么办求代码

解决方案 »

  1.   

    如果是超常,可以换Long;但楼主你的问题还有另一个哦,那个参数0是不对的!        String binary="1010101010101000111000011111001110";
            String hex=Long.toHexString(Long.valueOf(binary, 2));
      

  2.   

    嗯,那个0是写错了。。我刚试了下改成Long,最多找度也不能超过63位,不然也是会报错的,,有没有办法不管是多长转为十六进制都不会报错
      

  3.   

    换成Long可以有64位,就不止32位啦。
    但这只是让你报错的几率降低了
    可以考虑用BigInteger
      

  4.   

    BigInteger好没有toHexString()这个方法啊
      

  5.   

    超长的要自己搞定,alexandertech的意思是可以用BigInteger来保存你的计算结果。但计算过程要自己把 二进制截取成 64 位 64位 这样,从最前面开始转换,然后每次只转换64位。然后把保存结果的BigInteger乘以2^64,再将转换后的数值加到之前的BigInteger中。
      

  6.   

    哦,认真看了下API,发现搞错了,BigInteger支持的,不过要用构造函数:BigInteger(String val, int radix) 
      

  7.   


    全部连起来用:
    String hex=BigInteger.toString(new BigInteger(binary, 2), 16);
      

  8.   

    public class test {
    public static void main(String argc[]) {
    String binary = "0000011110000000000000001111111111111111111111111111111111111111111111110000000000000000000000";
    String a = "";
    String temp = "";
    StringBuffer sb = new StringBuffer();
    if (binary.length() % 4 != 0)// 把串的长度补成4的倍数,如11000变为00011000
    {
    for (int j = 0; j < 4 - (binary.length() % 4); j++)
    a += "0";
    binary = a + binary;
    }
    for (int i = binary.length(); i >= 4; i = i - 4)// 4位变为16进制
    {
    temp = binary.substring(i - 4, i);
    sb.append(Long.toHexString(Long.valueOf(temp, 2)));
    }
    sb = sb.reverse();
    while (sb.charAt(0) == '0' && !sb.equals("0"))// 取出串全面的0,00A3变为A3
    {
    sb = sb.deleteCharAt(0);
    }
    System.out.println(sb);
    }
    }