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

Java將字節(jié)轉(zhuǎn)換為十六進制代碼分享

 更新時間:2016年01月15日 11:37:12   投稿:hebedich  
我們知道,在java中,一個byte 就是一個字節(jié),也就是八個二進制位;而4個二進制位就可以表示一個十六進制位,所以一個byte可以轉(zhuǎn)化為2個十六進制位。下面我們就來詳細看下具體方法吧。

本文部分代碼摘錄自網(wǎng)上,并稍加整理,用于字節(jié)與十六進制之間的轉(zhuǎn)換。

/**
 * reference apache commons <a
 * >http://commons.apache.org/codec/</a>
 * 
 * byte占用8位,十六進制字符占用4位。所以可以把一個byte轉(zhuǎn)換成兩個相應(yīng)的十六進制字符,即把byte的高4位和低4位 * 分別轉(zhuǎn)換成相應(yīng)的十六進制字符H和L,并組合起來。相反的轉(zhuǎn)換也是同理。
 * 
 */
public class Hex {
 
  /**
   * 用于建立十六進制字符的輸出
   */
  private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f' };
 
  /**
   * 用于建立十六進制字符的輸出
   */
  private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'A', 'B', 'C', 'D', 'E', 'F' };
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符數(shù)組。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的char[]長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @return 包含十六進制字符的char[]
   */
  public static char[] encodeHex(final byte[] data) {
    return encodeHex(data, true);
  }
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符數(shù)組。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的char[]長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @param toLowerCase
   *      <code>true</code> 傳換成小寫格式 , <code>false</code> 傳換成大寫格式
   * @return 包含十六進制字符的char[]
   */
  public static char[] encodeHex(final byte[] data, final boolean toLowerCase) {
    return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
  }
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符數(shù)組。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的char[]長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @param toDigits
   *      用于控制輸出的字母表
   * @return 包含十六進制字符的char[]
   */
  protected static char[] encodeHex(final byte[] data, final char[] toDigits) {
    int l = data.length;
    char[] out = new char[l << 1];
    // two characters form the hex value.
    for (int i = 0, j = 0; i < l; i++) {
      out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
      out[j++] = toDigits[0x0F & data[i]];
    }
    return out;
  }
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符串。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的的字符串長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @return 十六進制字符串
   */
  public static String encodeHexStr(final byte[] data) {
    return encodeHexStr(data, true);
  }
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符串。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的的字符串長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @param toLowerCase
   *      <code>true</code> 傳換成小寫格式 , <code>false</code> 傳換成大寫格式
   * @return 十六進制字符串
   */
  public static String encodeHexStr(byte[] data, boolean toLowerCase) {
    return encodeHexStr(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
  }
 
  /**
   * 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符串。
   * 
   * 因為使用兩個字符表示一個字節(jié),所以返回的的字符串長度將是參數(shù)byte[]長度的兩倍。
   * 
   * @param data
   *      用于轉(zhuǎn)換為十六進制字符的byte[]
   * @param toDigits
   *      用于控制輸出的字母表
   * @return 十六進制字符串
   */
  protected static String encodeHexStr(byte[] data, char[] toDigits) {
    return new String(encodeHex(data, toDigits));
  }
 
  /**
   * 將十六進制字符數(shù)組轉(zhuǎn)換為字節(jié)數(shù)組
   * 
   * @param data
   *      十六進制char[]
   * @return byte[]
   * @throws RuntimeException
   *       如果源十六進制字符數(shù)組的長度是奇數(shù),將拋出運行時異常
   */
  public static byte[] decodeHex(char[] data) {
    int len = data.length;
 
    if ((len & 0x01) != 0) {
      throw new RuntimeException("Odd number of characters.");
    }
 
    // 一個byte對應(yīng)兩個十六進制字符,則將byte[]大小設(shè)置為char[]大小的一半
    byte[] out = new byte[len >> 1];
 
    // two characters form the hex value.
    for (int i = 0, j = 0; j < len; i++) {
      int f = toDigit(data[j], j) << 4;
      j++;
      f = f | toDigit(data[j], j);
      j++;
      out[i] = (byte) (f & 0xFF);
    }
 
    return out;
  }
 
  /**
   * 將十六進制字符轉(zhuǎn)換成一個整數(shù)。
   * 
   * @param ch
   *      要轉(zhuǎn)換成整數(shù)的字符
   * @param index
   *      字符在字符數(shù)組中的位置
   * @return 一個整數(shù)
   * @throws RuntimeException
   *       當ch不是一個合法的十六進制字符時,拋出該異常
   */
  protected static int toDigit(final char ch, final int index) {
    final int digit = Character.digit(ch, 16);
    if (digit == -1) {
      throw new RuntimeException("Illegal hexadecimal character " + ch + " at index " + index);
    }
    return digit;
  }
 
  public static void main(String[] args) {
    String srcStr = "HelloWorld!";
    String encodeStr = encodeHexStr(srcStr.getBytes(), false);
    String decodeStr = new String(decodeHex(encodeStr.toCharArray()));
    System.out.println("源字符串:" + srcStr);
    System.out.println("字符串編碼為十六進制:" + encodeStr);
    System.out.println("十六進制解碼為字符串:" + decodeStr);
  }
 
}

相關(guān)文章

  • 一文詳解MySql外連接查詢在SpringBoot中的具體使用

    一文詳解MySql外連接查詢在SpringBoot中的具體使用

    外連接通常分為左外連接,右外連接和全外連接,這篇文章主要為大家詳細介紹了如何在SpringBoot中使用MySql的外連接查詢,需要的可以參考下
    2025-02-02
  • SpringMVC使用RESTful接口案例詳解

    SpringMVC使用RESTful接口案例詳解

    RESTful是一種web軟件風(fēng)格,它不是標準也不是協(xié)議,它不一定要采用,只是一種風(fēng)格,它倡導(dǎo)的是一個資源定位(url)及資源操作的風(fēng)格,這篇文章主要介紹了SpringBoot使用RESTful接口
    2022-11-11
  • java網(wǎng)上圖書商城(7)訂單模塊2

    java網(wǎng)上圖書商城(7)訂單模塊2

    這篇文章主要為大家詳細介紹了java網(wǎng)上圖書商城,訂單模塊第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java匿名內(nèi)部類原理與用法詳解

    Java匿名內(nèi)部類原理與用法詳解

    這篇文章主要介紹了Java匿名內(nèi)部類原理與用法,結(jié)合實例形式分析了Java匿名內(nèi)部類的概念、原理、應(yīng)用與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Quarkus的Spring擴展快速改造Spring項目

    Quarkus的Spring擴展快速改造Spring項目

    這篇文章主要為大家介紹了Quarkus的Spring項目擴展,帶大家快速改造Spring項目示例演繹,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • 工廠模式_動力節(jié)點Java學(xué)院整理

    工廠模式_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了工廠模式_動力節(jié)點Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 淺談MyBatis 如何執(zhí)行一條 SQL語句

    淺談MyBatis 如何執(zhí)行一條 SQL語句

    Mybatis 是 Java 開發(fā)中比較常用的 ORM 框架。在日常工作中,我們都是直接通過 Spring Boot 自動配置,并直接使用,但是卻不知道 Mybatis 是如何執(zhí)行一條 SQL 語句的,下面就一起講解一下
    2021-05-05
  • Java實現(xiàn)按行讀取大文件

    Java實現(xiàn)按行讀取大文件

    這篇文章主要介紹了Java實現(xiàn)按行讀取大文件的方法的小結(jié),非常的簡單實用,有需要的小伙伴尅參考下。
    2015-05-05
  • SpringBoot ApplicationEvent之事件發(fā)布與監(jiān)聽機制詳解

    SpringBoot ApplicationEvent之事件發(fā)布與監(jiān)聽機制詳解

    本文將深入探討SpringBoot的事件機制,介紹其核心概念、實現(xiàn)方法及最佳實踐,幫助開發(fā)者構(gòu)建更加靈活、可維護的應(yīng)用架構(gòu),希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java中的Integer的toBinaryString()方法實例

    java中的Integer的toBinaryString()方法實例

    這篇文章主要介紹了java中的Integer的toBinaryString()方法實例,有需要的朋友可以參考一下
    2013-12-12

最新評論

漳州市| 盐城市| 铅山县| 鄱阳县| 灌阳县| 江口县| 昌都县| 工布江达县| 湖南省| 清河县| 教育| 稷山县| 横峰县| 黄骅市| 故城县| 庆阳市| 三都| 徐水县| 墨竹工卡县| 铜鼓县| 河北省| 弥勒县| 双桥区| 中超| 盱眙县| 轮台县| 嵊州市| 八宿县| 辉县市| 林口县| 禹州市| 龙游县| 柘城县| 教育| 宁化县| 平顶山市| 舒兰市| 临清市| 甘谷县| 西宁市| 旬阳县|