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, ...
随机推荐
- NOIp2018模拟赛三十六
好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...
- 一句话木马和中国菜刀的结合拿webshell
什么叫做一句话木马: 就是一句简单的脚本语言,一句话木马分为Php,asp,aspx等 中国菜刀: 连接一句话木马的工具 实验的目的: 通过一句话木马来控制我们的服务器,拿到webshe ...
- ActiveMQ:JMS开源框架入门介绍
介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点: 基本的JMS概念 JMS的消息模式 介绍ActiveMQ 一个基于ActiveMQ的JMS例子程序 一:JMS基本概念 ...
- Google浏览器怎样删除指定网址的网址提示
方法例如以下: Windows系统:按键盘上的"箭头下".按shift+delete(或者shift+回退): Mac系统:按fn+shift+delete. (此方法不须要清空b ...
- css 清楚浮动的8种方式
清除浮动是每个 web前台设计师必须掌握的机能. css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同一时候会影响到前后标签.父级标签的位置及 width height 属性.并且相 ...
- iOS 中client和server的 Web Service 网络通信 (1)
当你打开你手机上新浪微博应用或者知乎应用是.你是否会去想这些显示在手机上的图片和数据时从哪里来的?又是通过如何的方法实现的?好.那么接下来就介绍是如何实现的.过程又是怎么样的. 当我们浏览着 ...
- 疯狂java讲义之数据类型与运算符
Java是一门强类型语言 所有变量必须先声明.后使用 指定类型的变量只能接受类型匹配的值 注释 @author 作者 @version 版本 @param 方法参数 @return 返回值 标识符与关 ...
- PHP str_replace() 和str_ireplace()函数
PHP str_replace() 和str_ireplace()函数 实例 把字符串 "Hello world!" 中的字符 "world" 替换为 &quo ...
- 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?
作者:知乎用户链接:https://www.zhihu.com/question/29187952/answer/48519630 我居然今天才看到这个问题,天……本专业,有幸听过他们这个实验的组会来 ...
- SharePoint 学习快速导航
根据我的学习过程,会不断的增加一些学习的快速链接 . 入门篇 SharePoint入门链接,针对刚刚开始了解SharePoint 的朋友,我也是处在入门的状态,随后会慢慢的累积增加 安装 | 部署 | ...