Java字节数组转换成十六进制字符串的几种方法
前言
最近在项目中需要将字节数组转换成十六进制字符串,而Java内置的库中并没有相关工具可用,因此查了一下byte数组转hex字符串的相关方法,列出如下,需要可以直接拿来使用。
方法1:使用String.format
public static String encodeHexString(byte[] data) {StringBuilder sb = new StringBuilder();for (byte b : data) {sb.append(String.format("%02x", b));}return sb.toString();
}
方法2:使用Formatter
public static String encodeHexString(byte[] data) {Formatter formatter = new Formatter();for (byte b : data) {formatter.format("%02x", b);}String result = formatter.toString();formatter.close();return result;
}
方法3:使用字节字符映射
public static String encodeHexString(byte[] data) {char[] hexArray = "0123456789abcdef".toCharArray();char[] out = new char[data.length * 2];for (int i = 0; i < data.length; i++) {int v = data[i] & 0xFF;//取byte的后八位out[i * 2] = hexArray[v >>> 4];out[i * 2 + 1] = hexArray[v & 0x0F];}return new String(out);
}
此处需要注意的是,Java中byte是有符号的,在将byte转为int时,int类型的值也会把这个符合带上。以-1为例,byte和int的二进制表示如下:
byte a = -1;//11111111
int b = -1;//11111111111111111111111111111111
因此需要用0xFF
屏蔽其他字节,只取byte后八位,即int v = data[i] & 0xFF;
。此处极容易忽略该问题而导致代码写错,因此一般来说不推荐这种写法。
方法4:使用commons-codec
引入commons-codec
的maven依赖:
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.14</version>
</dependency>
使用方法如下:
import org.apache.commons.codec.binary.Hex;byte[] data = {0xa, -0x3, 0xf, 0x0};
String hexString = Hex.encodeHexString(data);
System.out.println(hexString);
查看Hex.encodeHexString
中的源码,我们可以看到该方法的实现与方法3是类似的,即通过字节字符的映射来实现。
总结
以上介绍了Java中将字节数组转化成十六进制字符串的4种方法,需要的话可以直接拿来使用。个人推荐使用方法1和方法4:当Java项目中没有commons-codec
依赖时,直接使用方法1是最方便的,而且可以减少依赖数量,避免引入新的jar包;当项目中有使用commons-codec
时,直接使用方法4调用jar包中方法是很方便直接的。方法1容易理解且不容易出错,方法4已经由其他人帮我们封装好了实现,因此避免了我们自己实现而可能导致的出错。
参考链接:
Java code To convert byte to Hexadecimal - Stack Overflow
Java字节数组转换成十六进制字符串的几种方法相关推荐
- java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案
很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...
- 二进制数组转成十六进制字符串,以及十六进制字符串转二进制字符串
不说话,直接上代码. 1.二进制数组转十六进制字符串,下面两种方法都可以 /*** 将字节数组转换成十六进制字符串进行输出* @param bArr* @return*/public static f ...
- Java将字节数组转换成字符串
reference:http://blog.csdn.net/lmj623565791/article/details/23609929 项目要求把通过TCP传过来的原始报文做保存,所以要先把字节数组 ...
- C#:十六进制字节数组 转换成 字符串、字符串形式的16进制数据 转换成 十六进制字节数组
十六进制字节数组 转换成 字符串 /// <summary>/// 十六进制字节数组 转换成 字符串/// </summary>/// <returns></ ...
- java中 如何将一个字节数组转换成字符串
String tmpStr="我的测试"; byte[] tb = tmpStr.getBytes(); String m=new String(tb); System.o ...
- C语言:十进制转换成十六进制字符串和数组
1.十进制转换成十六进制字符串 #include<stdio.h> /*函数: 将十进制数字转换为十六进制,并将转换后的数字存储在字符串中并输出 */ void dec2hex(int n ...
- C#字节数组转换成字符串转
C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...
- InputStream输入流转换成字节数组 和 字节数组转换成字符串
https://blog.csdn.net/night_iv/article/details/7525760?utm_source=blogxgwz5 https://www.cnblogs.com/ ...
- ASCII字节数组转换成字符串
有一些通信中,需要字符串装换成ASCII字节数组数据,进行数据通信. 在数据解析的过程中,就需要将字节数组转换成字符串. byte[] data: String version; data的数据如下: ...
最新文章
- 2021年中国计算机视觉人才调研开启啦,诚邀各位开发者们参与~
- LiveVideoStack线上分享第三季(六):深度学习与视频编码
- poj 2492 A Bug's Life
- TCP/IP 三次握手和四次挥手
- 推荐.neter常用优秀开源项目系列之二
- c语言程序设计班档案管理系统报告,C语言班级档案管理系统
- hmac hmac.new_使用HMAC(Play 2.0)保护REST服务
- myeclipse8.5 离线装SVN
- tomcat启动占了12g_tomcat服务为何报内存相关错误??
- php selenium下拉列表,Selenium+java - 下拉框处理
- 大数据之-Hadoop3.x_MapReduce_TextInputFormat---大数据之hadoop3.x工作笔记0107
- 为什么8位有符号数的范围为“-128 — +127”?(转载加补充)
- 谷歌技术三宝之BigTable(转)
- 求解偏微分方程开源有限元软件deal.II学习--Step 13
- L3-016 二叉搜索树的结构 (30 分)
- 创建win10介质进度为0_win10介质创建工具(media creation tool)下载_win10介质创建工具(media creation tool)官方下载-太平洋下载中心...
- android 输入光标修改颜色_Android修改光标颜色
- Beyond Compare和UltraCompare有什么不一样
- 数据库第三次实验报告
- redis中存集合_如何在Redis中管理集合
热门文章
- 快速了解条码打印机碳带
- [Vue warn]: Failed to resolve directive: modle (found in ComponentA)
- uniapp中实现swiper高度自适应 - vue3
- android ndk 编译虚幻4,[UE4]Android 打包步骤与keystore生成设置
- JSCH实现文件上传下载
- 杭电oj —— 2058 (超时优化)
- 《看漫画学Python》1、2版分享,初阶+进阶一起学
- android 高德地图移动卡顿_Bmap地图,比百度、高德更好用。简洁、无广告。圣诞快乐...
- 讯飞语音合成andriod版本
- java-net-php-python-jps小学生学习系统的开发计算机毕业设计程序