写点什么

Java 将字节数组转化为 16 进制的多种方案

  • 2022 年 5 月 06 日
  • 本文字数:749 字

    阅读完需:约 2 分钟

public static String bytes2hex01(byte[] bytes)


{


/**


  • 第一个参数的解释,记得一定要设置为 1

  • signum of the number (-1 for negative, 0 for zero, 1 for positive).


*/


BigInteger bigInteger = new BigInteger(1, bytes);


return bigInteger.toString(16);


}


注:项目中偷懒使用 BigInteger 将字节数组转化为 2 进制字符串,发现 BigInteger 会省略前面的几个 0,我擦。。。以此铭记。


方案二:将每 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 个字节与 0xFF 进行与运算,然后转化为 10 进制,然后借助于 Integer 再转化为 16 进制


/**


  • 方式二

  • @param bytes

  • @return


*/


public static String bytes2hex02(byte[] bytes)


{


StringBuilder sb = new StringBuilder();


String tmp = null;


for (byte b : bytes)


{


// 将每个字节与 0xFF 进行与运算,然后转化为 10 进制,然后借助于 Integer 再转化为 16 进制


tmp = Integer.toHexString(0xFF & b);


if (tmp.length() == 1)// 每个字节 8 为,转为 16 进制标志,2 个 16 进制位


{


tmp = "0" + tmp;


}


sb.append(tmp);


}


return sb.toString();


}


方案三:分别取出字节的高四位与低四位然后分别得出 10 进制 0-15 这样的值,再利用一个字符串数组完美完成。对于转化的理解,当然最推荐第三种方式了。


/**


  • 方式三

  • @param bytes

  • @return


*/


public static String bytes2hex03(byte[] bytes)


{


final String HEX = "0123456789abcdef";


StringBuilder sb = new StringBuilder(bytes.length * 2);


for (byte b : bytes)


{


// 取出这个字节的高 4 位,然后与 0x0f 与运算,得到一个 0-15 之间的数据,通过 HEX.charAt(0-15)即为 16 进制数


sb.append(HEX.charAt((b >> 4) & 0x0f));


// 取出这个字节的低位,与 0x0f 与运算,得到一个 0-15 之间的数据,通过 HEX.charAt(0-15)即为 16 进制数

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java 将字节数组转化为16进制的多种方案_程序员_爱好编程进阶_InfoQ写作社区