最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java byte數組與16進制間相互轉換的示例

 更新時間:2020年10月23日 09:30:05   作者:Marydon  
這篇文章主要介紹了java byte數組與16進制間相互轉換的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

1.準備工作

import java.util.Arrays;

/**
 * Byte[]與hex的相互轉換
 * @explain
 * @author Marydon
 * @creationTime 2018年6月11日下午2:29:11
 * @version 1.0
 * @since
 * @email marydon20170307@163.com
 */
public class ByteUtils {

  // 16進制字符
  private static final char[] HEX_CHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
}

2.byte類型數組轉化成16進制字符串

  方法一

/**
 * 方法一:將byte類型數組轉化成16進制字符串
 * @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 使用數組
 * @param bytes
 * @return
 */
public static String toHexString2(byte[] bytes) {
  // 一個byte為8位,可用兩個十六進制位表示
  char[] buf = new char[bytes.length * 2];
  int a = 0;
  int index = 0;
  // 使用除與取余進行轉換
  for (byte b : bytes) {
    if (b < 0)
      a = 256 + b;
    else
      a = b;

    // 偶數位用商表示
    buf[index++] = HEX_CHAR[a / 16];
    // 奇數位用余數表示
    buf[index++] = HEX_CHAR[a % 16];
  }
  // char[]-->String
  return new String(buf);
}

  方法三

/**
 * 方法三: byte[]-->hexString
 * @explain 使用位運算
 * @param bytes
 * @return
 */
public static String toHexString3(byte[] bytes) {
  char[] buf = new char[bytes.length * 2];
  int index = 0;
  // 利用位運算進行轉換,可以看作方法二的變型
  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方法進行轉換
  for (byte b : bytes) {
    sb.append(String.format("%02x", new Integer(b & 0xff)));
  }

  return sb.toString();
}

  方法五

/**
 * 將byte數組轉換成16進制字符串
 *
 * @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進制字符串轉換為byte[]

  方法一

/**
 * 將16進制字符串轉換為byte[]
 * @explain 16進制字符串不區(qū)分大小寫,返回的數組相同
 * @param hexString
 *      16進制字符串
 * @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進制字符串
  String hex;
  for (int i = 0; i < hexString.length() / 2; i++) {
    // 每次截取2位
    hex = hexString.substring(i * 2, i * 2 + 2);
    // 16進制-->十進制
    bytes[i] = (byte) Integer.parseInt(hex, 16);
  }

  return bytes;
}

  方法二

/**
 * 將16進制轉換為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.測試

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é)數組為:" + Arrays.toString(bytes));
  System.out.println("byte數組轉16進制之方法一:" + toHexString(bytes));
  System.out.println("byte數組轉16進制之方法二:" + ByteUtils.toHexString2(bytes));
  System.out.println("byte數組轉16進制之方法三:" + ByteUtils.toHexString3(bytes));
  System.out.println("byte數組轉16進制之方法四:" + ByteUtils.toHexString4(bytes));
  System.out.println("==================================");
  String str = "7b226e616d65223a224d617279646f6e222c2277656273697465223a22687474703a2f2f7777772e636e626c6f67732e636f6d2f4d617279646f6e3230313730333037227d";
  System.out.println("轉換后的字節(jié)數組:" + Arrays.toString(fromHexString(str)));
  System.out.println(new String(fromHexString(str), "utf-8"));
}

補充

  1B=8b,也就是1byte=8bit;

  1KB=1024B;

  1MB=1024KB;

  1GB=1024MB;

  1TB=1024GB

  bit是計算機最小的存儲單元,只能存儲0和1,是Binary digit(二進制數位)的縮寫,意為“位”或“比特”,也就是二進制。

以上就是java byte數組與16進制間相互轉換的示例的詳細內容,更多關于java byte數組與16進制間的資料請關注腳本之家其它相關文章!

相關文章

  • java中UDP簡單聊天程序實例代碼

    java中UDP簡單聊天程序實例代碼

    這篇文章主要介紹了java中UDP簡單聊天程序實例代碼,有需要的朋友可以參考一下
    2013-12-12
  • Java 簡化正則表達式的使用

    Java 簡化正則表達式的使用

    本篇文章主要介紹了Java 簡化正則表達式使用的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • SpringDataJpa多表操作的實現

    SpringDataJpa多表操作的實現

    開發(fā)過程中會有很多多表的操作,他們之間有著各種關系,本文主要介紹了SpringDataJpa多表操作的實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • springboot 自定義配置Boolean屬性不生效的解決

    springboot 自定義配置Boolean屬性不生效的解決

    這篇文章主要介紹了springboot 自定義配置Boolean屬性不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Eclipse中maven的配置詳解

    Eclipse中maven的配置詳解

    這篇文章主要介紹了Eclipse中maven的配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 淺談java監(jiān)聽器的作用

    淺談java監(jiān)聽器的作用

    這篇文章主要介紹了淺談java監(jiān)聽器的作用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • SpringCloud開啟session共享并存儲到Redis的實現

    SpringCloud開啟session共享并存儲到Redis的實現

    這篇文章主要介紹了SpringCloud開啟session共享并存儲到Redis的實現方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 深入解析JVM對dll文件和對類的裝載過程

    深入解析JVM對dll文件和對類的裝載過程

    這篇文章主要介紹了JVM對dll文件的裝載和對類的裝載過程,針對Java在Windows下的一些運行情況作出講解,需要的朋友可以參考下
    2015-11-11
  • Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究

    Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究

    這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 去掉IntelliJ IDEA 中 mybatis 對應的 xml 文件警告的教程圖解

    去掉IntelliJ IDEA 中 mybatis 對應的 xml 文件警告的教程圖解

    本文通過圖文并茂的形式給大家介紹了去掉IntelliJ IDEA 中 mybatis 對應的 xml 文件警告的教程,需要的朋友可以參考下
    2018-06-06

最新評論

普宁市| 平山县| 虎林市| 建水县| 临清市| 唐河县| 旌德县| 阿克| 汪清县| 土默特右旗| 新昌县| 理塘县| 洱源县| 蓬安县| 洮南市| 白城市| 长治市| 麦盖提县| 庆城县| 芦溪县| 宝坻区| 营山县| 大宁县| 麻城市| 轮台县| 桐乡市| 蒲城县| 监利县| 楚雄市| 陵川县| 桐庐县| 济源市| 岳普湖县| 荣成市| 灵武市| 项城市| 噶尔县| 遂川县| 沈丘县| 始兴县| 浦北县|