证书的序列号一般都是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());
显示的结果跟大牛的不一样,这个问题还是留给大牛门去伤脑经了