java byte數(shù)組與16進(jìn)制間相互轉(zhuǎn)換的示例
1.準(zhǔn)備工作
import java.util.Arrays; /** * Byte[]與hex的相互轉(zhuǎn)換 * @explain * @author Marydon * @creationTime 2018年6月11日下午2:29:11 * @version 1.0 * @since * @email marydon20170307@163.com */ public class ByteUtils { // 16進(jìn)制字符 private static final char[] HEX_CHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; }
2.byte類型數(shù)組轉(zhuǎn)化成16進(jìn)制字符串
方法一
/** * 方法一:將byte類型數(shù)組轉(zhuǎn)化成16進(jìn)制字符串 * @explain 字符串拼接 * @param bytes * @return */ public static String toHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); int num; for (byte b : bytes) { num = b < 0 ? 256 + b : b; sb.append(HEX_CHAR[num / 16]).append(HEX_CHAR[num % 16]); } return sb.toString(); }
方法二
/** * 方法二: byte[] to hex string * @explain 使用數(shù)組 * @param bytes * @return */ public static String toHexString2(byte[] bytes) { // 一個(gè)byte為8位,可用兩個(gè)十六進(jìn)制位表示 char[] buf = new char[bytes.length * 2]; int a = 0; int index = 0; // 使用除與取余進(jìn)行轉(zhuǎn)換 for (byte b : bytes) { if (b < 0) a = 256 + b; else a = b; // 偶數(shù)位用商表示 buf[index++] = HEX_CHAR[a / 16]; // 奇數(shù)位用余數(shù)表示 buf[index++] = HEX_CHAR[a % 16]; } // char[]-->String return new String(buf); }
方法三
/** * 方法三: byte[]-->hexString * @explain 使用位運(yùn)算 * @param bytes * @return */ public static String toHexString3(byte[] bytes) { char[] buf = new char[bytes.length * 2]; int index = 0; // 利用位運(yùn)算進(jìn)行轉(zhuǎn)換,可以看作方法二的變型 for (byte b : bytes) { buf[index++] = HEX_CHAR[b >>> 4 & 0xf]; buf[index++] = HEX_CHAR[b & 0xf]; } return new String(buf); }
方法四
/** * 方法四:byte[]-->hexString * @param bytes * @return */ public static String toHexString4(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length * 2); // 使用String的format方法進(jìn)行轉(zhuǎn)換 for (byte b : bytes) { sb.append(String.format("%02x", new Integer(b & 0xff))); } return sb.toString(); }
方法五
/** * 將byte數(shù)組轉(zhuǎn)換成16進(jìn)制字符串 * * @param src * @return */ private static String bytesToHexString(byte[] src) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { sb.append(0); } sb.append(hv); } return sb.toString(); }
3.16進(jìn)制字符串轉(zhuǎn)換為byte[]
方法一
/** * 將16進(jìn)制字符串轉(zhuǎn)換為byte[] * @explain 16進(jìn)制字符串不區(qū)分大小寫,返回的數(shù)組相同 * @param hexString * 16進(jìn)制字符串 * @return byte[] */ public static byte[] fromHexString(String hexString) { if (null == hexString || "".equals(hexString.trim())) { return new byte[0]; } byte[] bytes = new byte[hexString.length() / 2]; // 16進(jìn)制字符串 String hex; for (int i = 0; i < hexString.length() / 2; i++) { // 每次截取2位 hex = hexString.substring(i * 2, i * 2 + 2); // 16進(jìn)制-->十進(jìn)制 bytes[i] = (byte) Integer.parseInt(hex, 16); } return bytes; }
方法二
/** * 將16進(jìn)制轉(zhuǎn)換為byte[] * @param hexStr * @return */ public static byte[] fromHex(String hexStr) { if (hexStr.length() < 1) return null; byte[] result = new byte[hexStr.length() / 2]; for (int i = 0; i < hexStr.length() / 2; i++) { int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low); } return result; }
方法三:
public static byte[] toByteArray(String data) { if (data == null) { return new byte[] {}; } if (data.length() == 0) { return new byte[] {}; } while (data.length() < 2) { data = "0" + data; } if (data.substring(0, 2).toLowerCase().equals("0x")) { data = data.substring(2); } if (data.length() % 2 == 1) { data = "0" + data; } data = data.toUpperCase(); byte[] bytes = new byte[data.length() / 2]; String hexString = "0123456789ABCDEF"; for (int i = 0; i < bytes.length; i++) { int byteConv = hexString.indexOf(data.charAt(i * 2)) * 0x10; byteConv += hexString.indexOf(data.charAt(i * 2 + 1)); bytes[i] = (byte) (byteConv & 0xFF); } return bytes; }
4.測(cè)試
public static void main(String[] args) throws Exception { String json = "{\"name\":\"Marydon\",\"website\":\"http://www.cnblogs.com/Marydon20170307\"}"; byte[] bytes = json.getBytes("utf-8"); System.out.println("字節(jié)數(shù)組為:" + Arrays.toString(bytes)); System.out.println("byte數(shù)組轉(zhuǎn)16進(jìn)制之方法一:" + toHexString(bytes)); System.out.println("byte數(shù)組轉(zhuǎn)16進(jìn)制之方法二:" + ByteUtils.toHexString2(bytes)); System.out.println("byte數(shù)組轉(zhuǎn)16進(jìn)制之方法三:" + ByteUtils.toHexString3(bytes)); System.out.println("byte數(shù)組轉(zhuǎn)16進(jìn)制之方法四:" + ByteUtils.toHexString4(bytes)); System.out.println("=================================="); String str = "7b226e616d65223a224d617279646f6e222c2277656273697465223a22687474703a2f2f7777772e636e626c6f67732e636f6d2f4d617279646f6e3230313730333037227d"; System.out.println("轉(zhuǎn)換后的字節(jié)數(shù)組:" + Arrays.toString(fromHexString(str))); System.out.println(new String(fromHexString(str), "utf-8")); }
補(bǔ)充
1B=8b,也就是1byte=8bit;
1KB=1024B;
1MB=1024KB;
1GB=1024MB;
1TB=1024GB
bit是計(jì)算機(jī)最小的存儲(chǔ)單元,只能存儲(chǔ)0和1,是Binary digit(二進(jìn)制數(shù)位)的縮寫,意為“位”或“比特”,也就是二進(jìn)制。
以上就是java byte數(shù)組與16進(jìn)制間相互轉(zhuǎn)換的示例的詳細(xì)內(nèi)容,更多關(guān)于java byte數(shù)組與16進(jìn)制間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java 如何使用Feign發(fā)送HTTP請(qǐng)求
這篇文章主要介紹了Java 如何使用Feign發(fā)送HTTP請(qǐng)求,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量
這篇文章主要介紹了微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Java lambda list轉(zhuǎn)換map時(shí),把多個(gè)參數(shù)拼接作為key操作
這篇文章主要介紹了Java lambda list轉(zhuǎn)換map時(shí),把多個(gè)參數(shù)拼接作為key操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法
任務(wù)超時(shí)處理是比較常見的需求,Java中對(duì)超時(shí)任務(wù)的處理有兩種方式,在文中給大家詳細(xì)介紹,本文重點(diǎn)給大家介紹Java實(shí)現(xiàn)任務(wù)超時(shí)處理方法,需要的朋友可以參考下2019-06-06Spring自動(dòng)裝配Bean實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Spring自動(dòng)裝配Bean實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02SpringBoot項(xiàng)目熱部署的實(shí)現(xiàn)
SpringBoot項(xiàng)目熱部署是一種讓開發(fā)人員在修改代碼后無(wú)需重啟應(yīng)用即可看到更改效果的技術(shù),通過(guò)使用SpringBoot的DevTools等工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09