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:
二进制与十六进制互转测试
Java中二进制字节与十六进制互转的更多相关文章
- c#与java中byte字节的区别及转换方法
原文:c#与java中byte字节的区别及转换方法 在java中 byte的范围在 [-128,127] 在C#中 byte的范围在 [0,255] 所以 java程序与C#程序 进行数据传输的时 ...
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换
public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...
- Java中的字节,字符与编码,解码
ASCII编码 ASCII码主要是为了表示英文字符而设计的,ASCII码一共规定了128个字符的编码(0x00-0x7F),只占用了一个字节的后面7位,最前面的1位统一规定为0. ISO-8859-1 ...
- 弄清java中的字节与字符
问题 在java中,一个字符等于多少字节? 或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节? 答案 Java采用unicode来表示字符,java中的一个char是2 ...
- Java中根据字节截取字符串
一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是‘A’还是‘中’都占两个字节. 代码点值:与Unicod ...
- java中 二进制 八进制 十六进制 十进制 相互转换 最简方法
package com.swift; import java.util.Scanner; public class Hex2Decimal { public static void main(Stri ...
- 【转】java中float与byte[]的互转 -- 不错
原文网址:http://tjmljw.iteye.com/blog/1767716 起因:想把一个float[]转换成内存数据,查了一下,下面两个方法可以将float转成byte[]. 方法一 imp ...
- 在Java中按字节获得字符串长度的三种方法
转载:http://www.blogjava.net/nokiaguy/archive/2010/04/11/317982.html 由于Java是基于Unicode编码的,因此,一个汉字的长度为1, ...
随机推荐
- How Javascript works (Javascript工作原理) (六) WebAssembly 对比 JavaScript 及其使用场景
个人总结: 1.webassembly简介:WebAssembly是一种用于开发网络应用的高效,底层的字节码.允许在网络应用中使用除JavaScript的语言以外的语言(比如C,C++,Rust及其他 ...
- LibSVM-windows
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50112477 官方Web: https ...
- Fiddler(Web/HTTP调试利器)
简述 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指cookie.htm ...
- 转载:爱加密邀您参加5月17日深圳App开发沙龙活动
听闻,移动互联网的九大门派已集结在一起,各路顶尖高手携App修炼宝典九阴真经现身,一场席卷全国的App修炼风暴即将来临.5月17日,以“移动开发者如何白手起家.快速盈利”为主题的沙龙活动将在深圳市南山 ...
- leetCode(38):Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...
- Pocket英语语法---三、英语动词的特点是什么
Pocket英语语法---三.英语动词的特点是什么 一.总结 一句话总结:即表示时间(时态),又表示人数(单复数) 1.第十七讲,不定量表达法? 1.a few为肯定含义几个,few为否定含义没几个, ...
- kibana 5.5 源码编译踩坑记录
由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行. 注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm ...
- 131.lambda表达式小结
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下:[函数对象参数](操作符重载函数参数) mutable或exception声明->返回 ...
- mysql读写分离的解决方案
来源于网上整理 http://yanwt.iteye.com/blog/1460780 现有三种解决方式实现mysql读写分离 1 程序修改mysql操作类 优点:直接和数据库通信,简单快捷的读写分离 ...
- PostgreSQL Replication之第七章 理解Linux高可用(1)
高可用(HA)是工业长期持续的,不间断的服务.在本章,您将了解高可用软件的历史,概念和实现与PostgreSQL复制和高可用之间的关系. 本章将详细地讲述如下主题: •理解高可用性的目的 •衡量可用性 ...