java 二进制和十六进制的互转
2016-05-23 17:54
417 查看
前段时间里项目里用到了2进制和16进制的转换,最开始一直用的包装类型自带的转换方法,类似这样的 十六进制转成十进制
这样的方法在十六进制很短的情况下没问题,但是在十六进制很长的时候就会出错,比如:
会直接抛 java.lang.NumberFormatException: For input string: “FFFFFFFF” 异常,因为通过这样的转换,在把字符串转成整形的时候,长度太长了,超过的整形的最大值,
所以不能直接使用这样的方法转换,我在网上查了一些资料,找到了转换的方法,在这里分享一下,希望可以帮到遇到类似问题的小伙伴。。。老规矩直接上代码。。。
这些都是比较实用的,经过测试没有问题。可以直接拿来使用。。 大概就是这些,如果有更好的方法,希望大家指正。。
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)); }
这些都是比较实用的,经过测试没有问题。可以直接拿来使用。。 大概就是这些,如果有更好的方法,希望大家指正。。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树