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, ...
随机推荐
- Node_进阶_8
Node进阶第八天 一.复习 Node.js特点:单线程.异步I/O(非阻塞I/O).事件驱动(事件环). 适合的程序:就是没有太多的计算,I/O比较多的业务. 举例:留言本.考试系统.说说.图片裁切 ...
- 关于JavaScript中this的指向,你知晓几分?请速来围观!
---恢复内容开始--- 一.this是什么东东? this是指包含它的函数作为方法被调用时所属的对象.这句话理解起来跟卵一样看不懂,但是如果你把它拆分开来变成这三句话后就好理解一点了. 1.包含它的 ...
- vue父子组件通信传值
父组件 -> 子组件 通过props来进行通信 父组件代码: <Children :dataName = "dataContent" /> //dataName: ...
- [LeetCode] 122. 买卖股票的最佳时机ii best-time-to-buy-and-sell-stock-ii(贪心算法)
思路: 只要第二天的价格高于第一天,就进行交易.(这样的话就默认可以同一天内先卖出再买进) class Solution(object): def maxProfit(self, prices): & ...
- 洛谷 P1855 榨取kkksc03 (二维费用背包)
加多一维就行了 #include<cstdio> #include<algorithm> #include<cstring> #define REP(i, a, b ...
- [luogu] P1772 [ZJOI2006]物流运输(动态规划,最短路)
P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线 ...
- hadoop-15-Ambari进行HDP、zookeeper安装
hadoop-15-Ambari进行HDP.zookeeper安装 1,登陆server_1:8080 admin/admin 2,命名:Hdp_cluster 3,输入HDP.HDP_Utils 地 ...
- <转>Openstack ceilometer 宿主机监控模块扩展
<Openstack ceilometer监控项扩展>( http://eccp.csdb.cn/blog/?p=352 )主要介绍了对虚拟机监控项扩展, 比較简单.怎样在ceilomet ...
- zjnu(1181)——石子合并
这道题算是最简单的区间dp了..非常久之前写的,搞懂原理了就1A. 传送门:problem_id=1181">http://acm.zjnu.edu.cn/CLanguage/show ...
- angularjs 遍历
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...