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
測試后截圖: