前言
前段時間裏項目裏用到了2進制和16進制的轉換,最開始一直用的包裝類型自帶的轉換方法,類似這樣的 十六進制轉成十進制
Integer.valueOf("FFFF",16).toString();
這樣的方法在十六進制很短的情況下沒問題,但是在十六進制很長的時候就會出錯,比如:
Integer.valueOf("FFFFFFFF",16).toString();
會直接拋 Java.lang.NumberFormatException: For input string: “FFFFFFFF” 異常,因爲通過這樣的轉換,在把字符串轉成整形的時候,長度太長了,超過的整形的最大值,
所以不能直接使用這樣的方法轉換,我在網上查了一些資料,找到了轉換的方法,在這裏分享一下,希望可以幫到遇到類似問題的小夥伴。。。老規矩直接上代碼。。。
private static String hexStr = "0123456789ABCDEF";
private static String[] binaryArray =
{"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111"};
/**
*
* @param str
* @return 二進制數組轉換爲二進制字符串 2-2
*/
public static String bytes2BinStr(byte[] bArray){
String outStr = "";
int pos = 0;
for(byte b:bArray){
//高四位
pos = (b&0xF0)>>4;
outStr+=binaryArray[pos];
//低四位
pos=b&0x0F;
outStr+=binaryArray[pos];
}
return outStr;
}
/**
*
* @param bytes
* @return 將二進制數組轉換爲十六進制字符串 2-16
*/
public static String bin2HexStr(byte[] bytes){
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; //+" "
}
return result;
}
/**
*
* @param hexString
* @return 將十六進制轉換爲二進制字節數組 16-2
*/
public static byte[] hexStr2BinArr(String hexString){
//hexString的長度對2取整,作爲bytes的長度
int len = hexString.length()/2;
byte[] bytes = new byte[len];
byte high = 0;//字節高四位
byte low = 0;//字節低四位
for(int i=0;i<len;i++){
//右移四位得到高位
high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
bytes[i] = (byte) (high|low);//高地位做或運算
}
return bytes;
}
/**
*
* @param hexString
* @return 將十六進制轉換爲二進制字符串 16-2
*/
public static String hexStr2BinStr(String hexString){
return bytes2BinStr(hexStr2BinArr(hexString));
}
這些都是比較實用的,經過測試沒有問題。可以直接拿來使用。。 大概就是這些,如果有更好的方法,希望大家指正。。