10进制和16进制互转

来源:互联网 发布:js表单验证 编辑:程序博客网 时间:2024/05/04 14:15

证书的序列号一般都是16进制,公司显示的是10进制,有人问怎么看,也做了一个记录:

/**

    * 16进制转换为10进制

    * @param hex

    * @return

    */

public static final String hexToDecString(String hex) {

hex=replaceBlank(hex);

BigInteger bg=new BigInteger(hex,16); 

return bg.toString(10);

}

/**

    * 10进制转为16进制

    * @param dec

    * @return

    */

public static final String decTohexString(String dec) {

BigInteger bg=new BigInteger(dec,10); 

return bg.toString(16);

}

还有经常看到的中文编码基本也是16进制表示的,例如gb2312中有一段:


图片

可以将16进制转为byte[]  再将byte[]转化中文:

比如获取  "传":B4AB  

/**

    * 把16进制字符串转换成字节数组

    * @param hex

    * @return

    */

public static byte[] hexStringToByte(String hex) {

    int len = (hex.length() / 2);

    byte[] result = new byte[len];

    char[] achar = hex.toCharArray();

    for (int i = 0; i < len; i++) {

     int pos = i * 2;

     result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));

    }

    return result;

}

private static byte toByte(char c) {

    byte b = (byte) "0123456789ABCDEF".indexOf(c);

    return b;

}



测试代码:

   String s="B4AB";

byte[] b=StringUtil.hexStringToByte(s);

System.out.println(new String(b));

   想知道中文的16进制编码是啥反过来就好了。


另外在网上看到有个题目:计算:1234567891011121314151617181920*2019181716151413121110987654321,用:

BigInteger i = new BigInteger("1234567891011121314151617181920");

BigInteger j = new BigInteger("2019181716151413121110987654321");

BigInteger result = i.multiply(j);

System.out.println(result.toString());

显示的结果跟大牛的不一样,这个问题还是留给大牛门去伤脑经了

原创粉丝点击