2014-05-06 17:34 吴文付
最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。
这里整理一下。具体的计划为:封装一个转换类,一个测试类。
1、十进制 转 十六进制 二进制:
//调用java自带的api //测试十进制转16进制 2进制 System.out.println("十进制10转16进制为"+Integer.toHexString(10)); System.out.println("十进制10转二进制为"+Integer.toBinaryString(10));
2、十进制字符串转 16进制 转 2进制
将字符串转为 十进制后参考方法1
System.out.println("字符串10转16进制为"+Integer.toHexString(Integer.parseInt("10")));
System.out.println("字符串10转二进制为"+Integer.toBinaryString(Integer.parseInt("10")));
3、16转2转10
String h = "10000"; BigInteger srch = new BigInteger(h, 16); System.out.println("十六进制字符串10000转为10进制后为:"+srch.toString());//转换为10进制并输出结果 System.out.println("十六进制字符串10000转为2进制后为"+Integer.toBinaryString(Integer.parseInt(srch.toString())));
2014-05-07 15:18 修正:
上面的转换使用了BigInteger对象,也可以不使用。
如下方式也可以
16-》2
可以如下:Integer.toBinaryString(Integer.parseInt("0xAA",16))
16-10:
Integer.parseInt("0xAA",16)
4、2转10转16
String b = "10000"; BigInteger srcb= new BigInteger(b,2);//转换为BigInteger类型 System.out.println("二进制字符串10000转为10进制后为:"+srcb);//转换为10进制并输出结果 System.out.println("二进制字符串10000转为16进制后为"+Integer.toHexString(Integer.parseInt(srcb.toString())));
5、字节数组转 16进制字符串
public static String BinaryToHexString(byte[] bytes){ String hexStr = "0123456789ABCDEF"; String result = ""; String hex = ""; for(int i=0;i<bytes.length;i++){ //字节高4位 hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4)); //字节低4位 hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F)); result +=hex+" "; //这里可以去掉空格,或者添加0x标识符。 } return result; }
6、16进制字符串转 字节数组
public static byte[] HexStrToBytes(String str) { //如果字符串长度不为偶数,则追加0 if(str.length() % 2 !=0){ str = "0"+str; } byte[] b = new byte[str.length() / 2]; byte c1, c2; for (int y = 0, x = 0; x < str.length(); ++y, ++x) { c1 = (byte)str.charAt(x); if (c1 > 0x60) c1 -= 0x57; else if (c1 > 0x40) c1 -= 0x37; else c1 -= 0x30; c2 = (byte)str.charAt(++x); if (c2 > 0x60) c2 -= 0x57; else if (c2 > 0x40) c2 -= 0x37; else c2 -= 0x30; b[y] = (byte)((c1 << 4) + c2); } return b; }
2014-05-06 18:49 完成测试。
直接上代码吧。注释已经很清楚了
工程地址:http://download.csdn.net/detail/douniwan123654/7305195
测试后截图: