精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 HexFormat 來格式化和解析十六進制字符串

開發 前端
本文介紹了如何使用 JDK 17 新增的 HexFormat? 工具類來格式化和解析十六進制字符串,通過 HexFormat 工具類還可以輕松地設置分隔符,字母大小寫以及前綴和后綴。

十六進制(Hexadecimal)是一種數制系統,它使用 16 個數字來表示數值,分別是 0 到 9 和 A 到 F。

十六進制經常用于表示字節數據。在十六進制表示中,一個字節可以用兩個十六進制數字表示。例如,字節的取值范圍是 0 到 255,可以用 00 到 FF 來表示。其中,00 表示二進制的 00000000,FF 表示二進制的 11111111。這在 Socket 通信協議的定義中很常見。

簡單來說,對于一些較短的二進制數據,可以把它序列化為十六進制字符串,其中每 2 個字符,表示一個字節。同樣,也可以把十六進制的字符串解析為字節數組。最常見的場景就是把 Hash 計算的結果表示為十六進制字符串。

通常我們可以選擇使用第三方的 commons-codec 庫來實現格式化和解析十六進制字符串。可能是這個功能需求太常見,于是從JDK 17 開始,標準庫中提供了一個 HexFormat 工具類,用于格式化和解析十六進制字符串。

簡單地編碼和解碼

簡單地把字節數組編碼為十六進制字符串,以及把十六進制字符串解析為字節數組。

package cn.springdoc.demo.test;

import java.util.HexFormat;

public class Main {

    public static void main(String[] args) throws Exception {
        
        HexFormat format = HexFormat.of();
        
        String hex = format.formatHex("hello springdoc.cn".getBytes());
        System.out.println("Hex=" + hex);
        
        byte[] bytes = format.parseHex(hex);
        System.out.println("bytes=" + new String(bytes));
    }
}

首先,通過 of 靜態方法創建 HexFormat 實例對象。然后調用 formatHex 方法來把字節數組格式化十六進制字符串。最后再調用 parseHex 方法把十六進制字符串解析為字節數組。

parseHex 和 parseHex 都有一些重載方法,可以指定字符串或者字節數組的區間:

  • String formatHex(byte[] bytes)
  • String formatHex(byte[] bytes, int fromIndex, int toIndex)
  • <A extends Appendable> A formatHex(A out, byte[] bytes)
  • <A extends Appendable> A formatHex(A out, byte[] bytes, int fromIndex, int toIndex)
  • byte[] parseHex(CharSequence string)
  • byte[] parseHex(CharSequence string, int fromIndex, int toIndex)
  • byte[] parseHex(char[] chars, int fromIndex, int toIndex)

執行方法,輸出如下:

Hex=68656c6c6f20737072696e67646f632e636e
bytes=hello springdoc.cn

分隔符

在一些場景中,給十六進制字符串中每一個字節之間添加一個分隔符可讀性會更好。

例如:68:65:6c:6c:6f:20:73:70:72:69:6e:67:64:6f:63:2e:63:6e。

// 通過 ofDelimiter 方法創建HexFormat,指定分隔符
HexFormat format = HexFormat.ofDelimiter(":");

String hex = format.formatHex("hello springdoc.cn".getBytes());
System.out.println("Hex=" + hex);

byte[] bytes = format.parseHex(hex);
System.out.println("bytes=" + new String(bytes));

// 獲取分隔符
String delimiter = format.delimiter();
System.out.println("分隔符=" + delimiter);

只需要通過 ofDelimiter 靜態方法,指定分隔符來創建 HexFormat 實例即可,同時也可以通過 delimiter 方法來獲取設置的分隔符。

輸出如下,每個字節(兩個字符)之間都添加了指定的分隔符:

Hex=68:65:6c:6c:6f:20:73:70:72:69:6e:67:64:6f:63:2e:63:6e
bytes=hello springdoc.cn
分隔符=:

前綴和后綴

也可以給每個字節,即每兩個十六進制字符串設置前綴和后綴。

HexFormat format = HexFormat.ofDelimiter(":")
        .withPrefix("[")    // 設置前綴
        .withSuffix("]")    // 設置后綴
        ;

String hex = format.formatHex("hello springdoc.cn".getBytes());
System.out.println("Hex=" + hex);

byte[] bytes = format.parseHex(hex);
System.out.println("bytes=" + new String(bytes));

System.out.println("前綴=" + format.prefix() + ", 后綴=" + format.suffix());

通過 withPrefix 和 withSuffix 方法來設置前綴和后綴。注意 HexFormat 是不可變的對象(類似于 String),所以任何修改都會返回一個新的 HexFormat 對象。

輸出如下:

Hex=[68]:[65]:[6c]:[6c]:[6f]:[20]:[73]:[70]:[72]:[69]:[6e]:[67]:[64]:[6f]:[63]:[2e]:[63]:[6e]
bytes=hello springdoc.cn
前綴=[, 后綴=]

大小寫

十六進制中有 A - F 字母,也可以設置字母的大小寫。

HexFormat format = HexFormat.of()
    //  .withLowerCase()    // 字母小寫,默認
        .withUpperCase()    // 字母大寫
        ;

String hex = format.formatHex("hello springdoc.cn".getBytes());
System.out.println("Hex=" + hex);

byte[] bytes = format.parseHex(hex);
System.out.println("bytes=" + new String(bytes));

System.out.println("大寫=" + format.isUpperCase());

通過 withLowerCase(默認)和 withUpperCase 方法來設置十六進制字符串中字母的大小寫,通過 isUpperCase 方法來獲取是否開啟了大寫。

輸出如下:

Hex=68656C6C6F20737072696E67646F632E636E
bytes=hello springdoc.cn
大寫=true

實際案例

最后來看一個實際案例,把 SHA256 哈希值編碼為十六進制字符串:

package cn.springdoc.demo.test;

import java.security.MessageDigest;
import java.util.HexFormat;

public class Main {

    public static void main(String[] args) throws Exception {

        // 創建 SHA256 MessageDigest
        MessageDigest digest = MessageDigest.getInstance("SHA256");
        
        // 計算字符串 "123456" 的哈希值
        byte[] sha256 = digest.digest("123456".getBytes());
        
        // 把哈希結果編碼為十六進制字符串
        String sha256Hex = HexFormat.of().withUpperCase().formatHex(sha256);
        
        System.out.println(sha256Hex);
    }
    }

輸出如下:

8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92

總結

本文介紹了如何使用 JDK 17 新增的 HexFormat 工具類來格式化和解析十六進制字符串,通過 HexFormat 工具類還可以輕松地設置分隔符,字母大小寫以及前綴和后綴。

責任編輯:武曉燕 來源: SpringBoot中文站
相關推薦

2010-02-01 16:46:07

C++格式化字符串

2013-07-25 15:01:47

iOS開發學習十六進制和字符串轉換

2021-06-09 07:55:18

Python格式化字符串

2009-11-26 18:36:52

PHP函數sprint

2009-09-02 15:56:49

C#格式化字符串

2024-12-09 08:10:00

Python字符串格式化

2020-06-28 08:26:41

Python開發工具

2009-09-03 18:45:06

GridView格式化

2022-05-09 14:04:27

Python字符串格式化輸出

2017-01-16 16:33:06

Python 字符串漏洞

2020-09-02 07:19:41

printf 格式化輸出Unix

2009-09-03 18:05:04

ASP.NET字符串格

2024-03-06 08:41:14

Python字符串格式化工具

2024-02-22 09:46:04

C++字符串格式化開發

2024-01-02 08:43:48

qs工具庫格式化

2010-08-03 10:46:41

Flex代碼格式化

2022-03-28 10:56:11

Python字符串格式化

2024-05-27 00:10:00

2009-08-28 10:55:16

C#實現轉換十六進制

2010-01-07 17:58:49

JSON數值
點贊
收藏

51CTO技術棧公眾號

a级片在线免费| 人妻无码中文字幕| 91成人精品| 精品成a人在线观看| 日日摸天天爽天天爽视频| 在线免费观看黄| 成人久久久精品乱码一区二区三区| 欧美一区二区三区免费视| 婷婷国产成人精品视频| 久久激情av| 欧美顶级少妇做爰| 日本在线xxx| 久久久久久久久免费视频| 成人国产亚洲欧美成人综合网| 国产成人精品视频在线| 久久精品视频久久| 日韩成人免费| 亚洲美女av网站| www.色.com| 91大神在线观看线路一区| 亚洲高清视频在线| 韩国黄色一级大片| www日韩tube| wwwwww.欧美系列| 999在线观看免费大全电视剧| 羞羞色院91蜜桃| av成人毛片| 欧美激情女人20p| 欧美日韩色视频| 加勒比久久综合| 亚洲第一视频网站| 五月天视频在线观看| 巨茎人妖videos另类| 亚洲v精品v日韩v欧美v专区| 黄色网zhan| 三级外国片在线观看视频| 91蜜桃婷婷狠狠久久综合9色| 亚洲free性xxxx护士白浆| 中文字幕一区二区三区免费看 | 国产婷婷在线视频| 蜜桃久久av一区| 日本中文字幕久久看| 日本一区二区欧美| 精品电影一区| 久久久欧美一区二区| 高h视频免费观看| 亚洲综合自拍| 欧美老少配视频| 成人性生活毛片| 亚洲影视一区二区三区| 久久五月天综合| 成年人一级黄色片| 综合激情一区| 九九视频这里只有精品 | 天天超碰亚洲| 俺也去精品视频在线观看| 91n在线视频| 99热国内精品| 色综合色综合久久综合频道88| 欧美成人三级视频| 黄色亚洲大片免费在线观看| 欧美大荫蒂xxx| 久久精品久久精品久久| 在线日韩中文| 欧洲中文字幕国产精品| 91在线视频免费播放| 天堂成人免费av电影一区| 国产精品福利无圣光在线一区| 国产日韩久久久| 美女视频黄 久久| 亚洲综合日韩中文字幕v在线| 午夜精品久久久久久久96蜜桃| www.欧美日韩| 欧美日韩综合另类| 尤物视频在线免费观看| 亚洲欧美国产三级| 青青青在线视频播放| 136福利第一导航国产在线| 欧美午夜激情视频| 久久撸在线视频| 日本精品视频| 日韩国产欧美精品在线| 免费看的黄色录像| 午夜视频一区| 日本欧美黄网站| 国产又粗又猛又色又| 粉嫩aⅴ一区二区三区四区| 精品蜜桃一区二区三区| 成人免费在线电影| 夜夜嗨av一区二区三区网页| 干日本少妇首页| 久久天天久久| 亚洲国产小视频| 亚洲欧美另类日本| 日韩午夜黄色| 成人黄色影片在线| 天堂v视频永久在线播放| 国产精品美女久久久久久久久| www.av91| 日本久久久久| 亚洲精品在线不卡| h色网站在线观看| 香蕉久久夜色精品| 91在线网站视频| 日本亚洲一区| 亚洲综合一区二区精品导航| 日av中文字幕| 久久97久久97精品免视看秋霞| 中文字幕一区二区精品| 国产无遮挡免费视频| 六月丁香婷婷久久| 免费99视频| 日日夜夜天天综合入口| 欧美性做爰猛烈叫床潮| 亚洲色图欧美日韩| 91精品推荐| 国产精品电影观看| 亚洲欧美日韩成人在线| 亚洲精品欧美综合四区| 国产wwwxx| 伊人成综合网yiren22| 欧美丰满老妇厨房牲生活| 亚洲一级视频在线观看| 久久伊人中文字幕| 久久99中文字幕| 日韩08精品| 久久久成人av| 国产一区二区女内射| 久久久一区二区三区| 国产一区二区三区小说| 日本精品国产| 久精品免费视频| 国产婷婷一区二区三区久久| 中文字幕亚洲一区二区av在线| 久草在在线视频| 综合伊思人在钱三区| 91精品国产沙发| 亚洲 欧美 精品| 精品成人国产在线观看男人呻吟| 中文字幕在线视频一区二区| 亚欧美无遮挡hd高清在线视频| 国产精品毛片a∨一区二区三区|国 | 久久天天综合| 久久久综合亚洲91久久98| 黄色网页在线免费观看| 欧美巨大另类极品videosbest | 日韩在线视屏| 91爱视频在线| 日韩专区一区二区| 狠狠色狠狠色综合日日五| 三叶草欧洲码在线| 亚洲影视综合| 日本一区二区三区免费观看| 欧美精品日日操| 在线播放国产精品| 国产精品尤物视频| 国产精品久久久久影视| 手机免费av片| 国产主播精品| 久久久一本精品99久久精品| 日本欧美不卡| 日韩最新av在线| www.天堂在线| 狠狠躁夜夜躁久久躁别揉| 波多野结衣办公室33分钟| 久久不射网站| 中文字幕一区二区三区四区五区| 国产精品中文| 97人人做人人爱| 高清毛片在线看| 欧美精选一区二区| 成人免费看片98| 久久久精品免费网站| 亚洲一级免费在线观看| 欧美黄色一区二区| 精品在线不卡| 欧美日韩免费电影| 欧美激情女人20p| 蝌蚪视频在线播放| 欧美日韩在线直播| 国产一级中文字幕| 国产欧美日韩综合精品一区二区| 日韩欧美理论片| 一本久道久久综合婷婷鲸鱼| 日本一区二区三区视频在线观看| 伊人久久一区| 欧美一级视频免费在线观看| av电影在线网| 亚洲精品国精品久久99热| 日本精品入口免费视频| 亚洲精品写真福利| 久久av无码精品人妻系列试探| 另类小说视频一区二区| 久久久久久久久久网| 日韩国产一区| 精品午夜一区二区三区| 中文成人激情娱乐网| 欧美中文字幕精品| www视频在线看| 亚洲免费影视第一页| 亚洲爱情岛论坛永久| 欧美主播一区二区三区| 五月天综合在线| 中文字幕一区二区三| 日本一区二区三区网站| 国产高清无密码一区二区三区| 免费在线观看的av网站| 欧美午夜不卡影院在线观看完整版免费| 欧美一区二区三区成人久久片| 亚洲一区二区免费在线观看| 国产精品午夜视频| 最新中文字幕在线播放| 欧美精品18videosex性欧美| 午夜激情视频在线| 精品一区二区三区三区| 亚洲精品一区二区三区蜜桃| 制服丝袜中文字幕亚洲| 69视频免费看| 色综合天天综合狠狠| 日韩av免费网址| 一区二区三区小说| 国产麻豆a毛片| 中文欧美字幕免费| 尤物视频最新网址| 日本毛片在线免费观看| av资源网在线播放| 久久中文字幕视频| av中文字幕在线| 亚洲欧美日韩在线一区| 天堂中文在线视频| 亚洲精品国产福利| 韩国中文字幕hd久久精品| 欧美一区二区三区成人| 国产精品欧美激情在线| 欧美日韩视频一区二区| 少妇一级淫片日本| 欧美亚洲一区二区在线| 欧美国产一级片| 色欧美日韩亚洲| www.久久久久久久| 色婷婷久久综合| 中文字幕免费在线观看视频| 精品久久久久久久久中文字幕| 国产午夜免费视频| 亚洲va欧美va人人爽午夜| 日本a在线观看| 五月婷婷另类国产| 日韩大片免费在线观看| 欧美日韩另类字幕中文| 69视频免费在线观看| 日韩欧美亚洲综合| 天堂网免费视频| 欧美三级午夜理伦三级中视频| 亚洲成人av影片| 欧洲生活片亚洲生活在线观看| 国产成人精品一区二区色戒| 欧美日韩国产经典色站一区二区三区| 艳妇乳肉豪妇荡乳av无码福利| 欧美日韩在线播放三区四区| 国产精品久久777777换脸| 91麻豆精品国产91久久久久| www夜片内射视频日韩精品成人| 精品日韩在线一区| 亚洲av成人无码网天堂| 国产亚洲精品一区二区| 日本中文字幕在线播放| 久久九九热免费视频| av毛片在线播放| 97超级碰碰碰久久久| 亚洲第一会所| 亚洲一区久久久| 牛牛影视久久网| 日韩av在线电影观看| 一区二区电影| 男人靠女人免费视频网站| 秋霞成人午夜伦在线观看| 杨幂一区二区国产精品| 91蝌蚪porny九色| www深夜成人a√在线| 亚洲一区日韩精品中文字幕| 黄色av网站免费观看| 777奇米四色成人影色区| 日本韩国免费观看| 影音先锋日韩有码| 欧美亚洲天堂| 国产精品久久久久国产a级| 韩国三级成人在线| 久久综合精品一区| 97精品视频| 久在线观看视频| 国内久久精品视频| 亚洲永久无码7777kkk| 中文字幕一区二区三区在线播放| 国产乡下妇女做爰视频| 911精品国产一区二区在线| 手机在线精品视频| 日韩亚洲第一页| 天堂√8在线中文| 91欧美日韩一区| 国内精品视频在线观看| 国产精品三级一区二区| 日本最新不卡在线| 玖玖爱在线精品视频| 亚洲青青青在线视频| 国产免费a视频| 亚洲精品美女网站| 日本aa在线| 91免费在线视频网站| 欧美理论在线播放| 777777av| 处破女av一区二区| 精品亚洲乱码一区二区| 日本电影亚洲天堂一区| 色综合久久久久久| 欧美激情综合亚洲一二区| 农村妇女一区二区| 青青草久久网络| 午夜综合激情| 朝桐光av一区二区三区| 一级做a爱片久久| 国产视频第一页| 精品国产一区二区三区久久狼黑人| 在线精品亚洲欧美日韩国产| 国精产品99永久一区一区| 国产精品v一区二区三区| 日韩欧美中文视频| 成人欧美一区二区三区| 一级片视频网站| 中文字幕亚洲欧美日韩2019| 成人欧美一区二区三区的电影| 久久精品丝袜高跟鞋| 亚洲国内欧美| 小毛片在线观看| 精品久久久久久久久久国产| 亚洲 欧美 激情 小说 另类| 91高清视频免费| 同性恋视频一区| 日韩欧美国产免费| 91蝌蚪porny| 福利网址在线观看| 亚洲性猛交xxxxwww| 婷婷激情一区| 亚洲国产精品毛片| 久久99久久久久久久久久久| а天堂中文在线资源| 777精品伊人久久久久大香线蕉| 国产精品一区二区三区视频网站| 91免费看片在线| 欧美二区视频| 一本色道久久hezyo无码| 亚洲一区二区三区影院| 欧美一级淫片aaaaaa| 668精品在线视频| 蜜桃国内精品久久久久软件9| 免费国产成人av| 国产精品欧美极品| 一区二区久久精品66国产精品| 久久综合免费视频| 亚洲精品视频一二三区| av日韩一区二区三区| 91麻豆国产在线观看| 欧美 亚洲 另类 激情 另类| 久久久精品网站| 国产66精品| 国产精品人人妻人人爽人人牛| 国产精品网友自拍| www.成人免费视频| 97精品欧美一区二区三区| 奇米狠狠一区二区三区| 特黄视频免费观看| 亚洲观看高清完整版在线观看| 精品99又大又爽又硬少妇毛片| 国产精品美女久久久久av超清| 亚洲精品一区二区妖精| 日本国产在线视频| 欧美综合亚洲图片综合区| www久久日com| 久久青青草原| 九九在线精品视频| 久久网免费视频| 亚洲人在线观看| 久久爱www.| 国产aaa一级片| 亚洲黄色在线视频| 青青久在线视频免费观看| 国产在线播放不卡| 99精品久久久| 国产人与禽zoz0性伦| 亚洲第一精品电影| 欧美在线一级| 69堂免费视频| 亚洲精品国产视频| 黄色av网址在线免费观看| 亚洲一区二区中文字幕| 丝袜美腿成人在线| 久草网在线观看| 日韩在线视频观看| 欧美一区二区三区久久| 国产亚洲色婷婷久久| 色婷婷综合五月|