Java 将字节数组转化为 16 进制的多种方案
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 进制数
评论