前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java byte转16进制字符串_Java字节数组转换成十六进制字符串的几种方法

java byte转16进制字符串_Java字节数组转换成十六进制字符串的几种方法

作者头像
用户7886150
修改2021-04-29 14:42:36
4.7K0
修改2021-04-29 14:42:36
举报
文章被收录于专栏:bit哲学院

参考链接: 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依赖:

 commons-codec

 commons-codec

 1.14

 使用方法如下:

 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已经由其他人帮我们封装好了实现,因此避免了我们自己实现而可能导致的出错。

 参考链接:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档