前言

最近在项目中需要将字节数组转换成十六进制字符串,而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字节数组转换成十六进制字符串的几种方法相关推荐

  1. java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案

    很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...

  2. 二进制数组转成十六进制字符串,以及十六进制字符串转二进制字符串

    不说话,直接上代码. 1.二进制数组转十六进制字符串,下面两种方法都可以 /*** 将字节数组转换成十六进制字符串进行输出* @param bArr* @return*/public static f ...

  3. Java将字节数组转换成字符串

    reference:http://blog.csdn.net/lmj623565791/article/details/23609929 项目要求把通过TCP传过来的原始报文做保存,所以要先把字节数组 ...

  4. C#:十六进制字节数组 转换成 字符串、字符串形式的16进制数据 转换成 十六进制字节数组

    十六进制字节数组 转换成 字符串 /// <summary>/// 十六进制字节数组 转换成 字符串/// </summary>/// <returns></ ...

  5. java中 如何将一个字节数组转换成字符串

    String tmpStr="我的测试";  byte[] tb = tmpStr.getBytes();  String m=new String(tb);   System.o ...

  6. C语言:十进制转换成十六进制字符串和数组

    1.十进制转换成十六进制字符串 #include<stdio.h> /*函数: 将十进制数字转换为十六进制,并将转换后的数字存储在字符串中并输出 */ void dec2hex(int n ...

  7. C#字节数组转换成字符串转

    C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...

  8. InputStream输入流转换成字节数组 和 字节数组转换成字符串

    https://blog.csdn.net/night_iv/article/details/7525760?utm_source=blogxgwz5 https://www.cnblogs.com/ ...

  9. ASCII字节数组转换成字符串

    有一些通信中,需要字符串装换成ASCII字节数组数据,进行数据通信. 在数据解析的过程中,就需要将字节数组转换成字符串. byte[] data: String version; data的数据如下: ...

最新文章

  1. 2021年中国计算机视觉人才调研开启啦,诚邀各位开发者们参与~
  2. LiveVideoStack线上分享第三季(六):深度学习与视频编码
  3. poj 2492 A Bug's Life
  4. TCP/IP 三次握手和四次挥手
  5. 推荐.neter常用优秀开源项目系列之二
  6. c语言程序设计班档案管理系统报告,C语言班级档案管理系统
  7. hmac hmac.new_使用HMAC(Play 2.0)保护REST服务
  8. myeclipse8.5 离线装SVN
  9. tomcat启动占了12g_tomcat服务为何报内存相关错误??
  10. php selenium下拉列表,Selenium+java - 下拉框处理
  11. 大数据之-Hadoop3.x_MapReduce_TextInputFormat---大数据之hadoop3.x工作笔记0107
  12. 为什么8位有符号数的范围为“-128 — +127”?(转载加补充)
  13. 谷歌技术三宝之BigTable(转)
  14. 求解偏微分方程开源有限元软件deal.II学习--Step 13
  15. L3-016 二叉搜索树的结构 (30 分)
  16. 创建win10介质进度为0_win10介质创建工具(media creation tool)下载_win10介质创建工具(media creation tool)官方下载-太平洋下载中心...
  17. android 输入光标修改颜色_Android修改光标颜色
  18. Beyond Compare和UltraCompare有什么不一样
  19. 数据库第三次实验报告
  20. redis中存集合_如何在Redis中管理集合

热门文章

  1. 快速了解条码打印机碳带
  2. [Vue warn]: Failed to resolve directive: modle (found in ComponentA)
  3. uniapp中实现swiper高度自适应 - vue3
  4. android ndk 编译虚幻4,[UE4]Android 打包步骤与keystore生成设置
  5. JSCH实现文件上传下载
  6. 杭电oj —— 2058 (超时优化)
  7. 《看漫画学Python》1、2版分享,初阶+进阶一起学
  8. android 高德地图移动卡顿_Bmap地图,比百度、高德更好用。简洁、无广告。圣诞快乐...
  9. 讯飞语音合成andriod版本
  10. java-net-php-python-jps小学生学习系统的开发计算机毕业设计程序