您的位置:首页 > 编程语言 > Java开发

java 二进制和十六进制的互转

2016-05-23 17:54 417 查看
前段时间里项目里用到了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));
}


这些都是比较实用的,经过测试没有问题。可以直接拿来使用。。 大概就是这些,如果有更好的方法,希望大家指正。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息