日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/31 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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进制的多种方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。