java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案
很多時候我們需要將字節數組轉化為16進制字符串來保存,尤其在很多加密的場景中,例如保存密鑰等。因為字節數組,除了寫入文件或者以二進制的形式寫入數據庫以外,無法直接轉為為字符串,因為字符串結尾有\0,當然肯定還有其他原因。
下面提供幾種Java中使用的方案:
方案一:直接利用BigInteger的方法,應該是最簡單的方案了。
/**
* 利用簽名輔助類,將字符串字節數組
* @param str
* @return
*/
public static byte[] md5(String str)
{
byte[] digest = null;
try
{
MessageDigest md = MessageDigest.getInstance("md5");
return digest = md.digest(str.getBytes());
} catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return null;
}
/**
* 方式一
*
* @param bytes
* @return
*/
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,我擦。。。以此銘記。
方案二:將每個字節與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進制數
sb.append(HEX.charAt(b & 0x0f));
}
return sb.toString();
}
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
總結
以上是生活随笔為你收集整理的java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钻石水晶幸运值多少满
- 下一篇: 识货如何领取优惠券