Java中二进制字节与十六进制互转
在Java中字节与十六进制的相互转换主要思想有两点:
1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。
2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示
我测试的Java代码如下:
- public class Test01 {
- 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"};
- public static void main(String[] args)
- {
- String str = "二进制与十六进制互转测试";
- System.out.println("源字符串:\n"+str);
- String hexString = BinaryToHexString(str.getBytes());
- System.out.println("转换为十六进制:\n"+hexString);
- System.out.println("转换为二进制:\n"+bytes2BinaryStr(str.getBytes()));
- byte [] bArray = HexStringToBinary(hexString);
- System.out.println("将str的十六进制文件转换为二进制再转为String:\n"+new String(bArray));
- }
- /**
- *
- * @param str
- * @return 转换为二进制字符串
- */
- public static String bytes2BinaryStr(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 将二进制转换为十六进制字符输出
- */
- public static String BinaryToHexString(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 将十六进制转换为字节数组
- */
- public static byte[] HexStringToBinary(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;
- }
- }
运行后的输出结果如下:
源字符串:
二进制与十六进制互转测试
转换为十六进制:
E4BA8CE8BF9BE588B6E4B88EE58D81E585ADE8BF9BE588B6E4BA92E8BDACE6B58BE8AF95
转换为二进制:
11100100 10111010 10001100 11101000 10111111 10011011 11100101
10001000 10110110 11100100 10111000 10001110 11100101 10001101
10000001 11100101 10000101 10101101 11101000 10111111 10011011
11100101 10001000 10110110 11100100 10111010 10010010 11101000
10111101 10101100 11100110 10110101 10001011 11101000 10101111
10010101
将str的十六进制文件转换为二进制并转为String:
二进制与十六进制互转测试
最新文章
- [Mahout] 完整部署过程
- SQL事务的使用
- 向已写好的多行插入sql语句中添加字段和值
- Servlet工作原理(转)
- [HDOJ2818]Building Block(带权并查集,路径压缩)
- 传输层-UDP
- passwordauthentication yes
- Tcl与Design Compiler (九)——综合后的形式验证
- Http和Socket详解
- 移动端touch事件实现页面弹动--小插件
- 使用Jmeter进行http接口做功能、性能测试
- mybatis传入List实现批量更新的坑
- maven配置环境变量失败解决办法
- import this
- iptables防火墙与日志系统配合使用 监控服务器特点端口的防问源IP
- English trip -- VC(情景课)9 B Outside chores 室外家务
- Ubuntu下启动/重启/停止apache服务器
- openstack配置域名访问
- push到github报错解决方法
- MySQL Flashback 闪回功能详解