精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品视频26uuu| 亚洲国产cao| 国产精品高潮呻吟久久av黑人| 亚洲天堂最新地址| 精品一区二区三区视频在线播放 | 欧美色综合网站| 日本xxx免费| 少妇又色又爽又黄的视频| 美女爽到呻吟久久久久| 日韩视频亚洲视频| 午夜av免费看| 日日夜夜亚洲| 婷婷丁香激情综合| 午夜啪啪免费视频| 四虎精品成人影院观看地址| 美女精品一区二区| 久久久久久久久91| 老司机精品免费视频| 精品成人自拍视频| 制服丝袜激情欧洲亚洲| 国产超级av在线| sm国产在线调教视频| 91亚洲国产成人精品一区二区三| 国产专区精品视频| 中文字幕69页| 亚洲激情二区| 久久综合久久美利坚合众国| 亚洲综合色一区| 福利片在线一区二区| 欧美性极品少妇| 国产午夜大地久久| 污视频在线看网站| 国产精品久久午夜夜伦鲁鲁| 久久久久久九九| 午夜久久久久久久久久| 久久国产精品露脸对白| 日韩av电影手机在线| 国产精品suv一区二区69| 我不卡影院28| 丝袜美腿亚洲一区二区| mm131美女视频| 黄色欧美网站| 日韩精品中文字幕一区| 在线观看国产福利| 欧美极品影院| 欧美视频第一页| 亚洲人成无码网站久久99热国产| 亚洲91av| 亚洲综合在线视频| 欧美另类videos| 91精选在线| **性色生活片久久毛片| 手机看片福利永久国产日韩| 青草久久伊人| 国产日产精品1区| 欧美日韩国产免费一区二区三区| 午夜在线视频观看| www.欧美日韩| 国产在线一区二区三区欧美| 天堂成人在线观看| 波多野结衣中文一区| 国内精品二区| 视频在线不卡| 久久久精品中文字幕麻豆发布| 蜜桃成人免费视频| 欧美少妇另类| 欧美激情一区二区三区| 亚洲国产一区二区在线| 在线看的av网站| 自拍偷拍国产精品| www婷婷av久久久影片| 伊人在我在线看导航| 亚洲午夜久久久久久久久电影网 | 91久久免费视频| 成人3d精品动漫精品一二三| 色偷偷综合社区| 久久久精品视频免费观看| 欧美~级网站不卡| 久久久久久久999精品视频| 日本免费一二三区| 天堂av在线一区| 国产精品一区二区久久精品| 国产视频在线观看免费 | 亚洲国产精品自拍视频| 在线日韩一区| 精品国产视频在线| 免费在线观看亚洲| 亚洲伊人观看| 国产精品日日摸夜夜添夜夜av| 国产又粗又黄又爽| 成人午夜私人影院| 日本精品一区二区三区高清 久久| av片在线看| 亚洲一二三四区不卡| 国产精品沙发午睡系列| 国产成人午夜性a一级毛片| 欧美一区二区三区啪啪| 黄色在线观看av| 久久国产电影| 6080yy精品一区二区三区| 国产免费a视频| 国产精品一二三区| 免费一区二区三区在在线视频| 秋霞午夜理伦电影在线观看| 亚洲影视在线观看| 鲁一鲁一鲁一鲁一av| www.豆豆成人网.com| 国产亚洲a∨片在线观看| 国产高潮国产高潮久久久91| 免费亚洲一区| 成人欧美视频在线| 在线免费av网站| 日韩欧美在线中文字幕| 无套白嫩进入乌克兰美女| 久久久久观看| 欧美麻豆久久久久久中文| youjizz在线视频| 成人小视频免费观看| 中文字幕免费在线不卡| 波多视频一区| 亚洲аv电影天堂网| 久久精品在线观看视频| 免费在线播放第一区高清av| 99re视频在线观看| 久草中文在线观看| 欧美亚洲综合久久| 人妻丰满熟妇aⅴ无码| 欧美在线亚洲| 成人两性免费视频| 成年人在线看| 欧美性猛交xxxx免费看久久久| 熟妇女人妻丰满少妇中文字幕| 欧美一区二区三区高清视频| 欧美一区二三区| 亚洲狼人综合网| 亚洲精品成人精品456| 91女神在线观看| 国产一区二区亚洲| 欧美综合一区第一页| 色窝窝无码一区二区三区| 有码一区二区三区| 国产高清999| 午夜精品久久久久久久四虎美女版| 国产成人精品免高潮在线观看| 天天综合网天天综合| 香蕉成人啪国产精品视频综合网 | 久久综合一区二区| 91动漫在线看| 成人精品动漫一区二区三区| 色综合久久久888| 精品国产av鲁一鲁一区| 亚洲精品第1页| 白丝校花扒腿让我c| 国产一区二区三区自拍| 国产精品裸体一区二区三区| av中文字幕在线看| 亚洲国产精品一区二区久| 国产成年人免费视频| 成人免费黄色在线| 国产高清www| 西野翔中文久久精品国产| 91成人福利在线| 欧美日韩影视| 欧美午夜电影一区| 久久久久人妻一区精品色| 精品一区二区三区的国产在线播放| 一区不卡视频| 麻豆久久一区| 久久全球大尺度高清视频| 人妻精品无码一区二区| 黑人巨大精品欧美一区二区免费| 免费在线观看成年人视频| 日韩精品久久理论片| 午夜精品短视频| 少妇高潮一区二区三区99| 欧美成人精品在线| 黄色小视频免费观看| 狠狠色香婷婷久久亚洲精品| 久久亚洲无码视频| 国产在线视频一区二区| 国产精品自拍合集| 精品综合久久88少妇激情| 国产精品av在线| 黄色免费在线网站| 亚洲成人三级在线| 黄色片视频免费| 亚洲婷婷在线视频| 捆绑裸体绳奴bdsm亚洲| 日韩国产欧美视频| 国产午夜精品视频一区二区三区| 乱中年女人伦av一区二区| 日产精品99久久久久久| а√资源新版在线天堂| 国产视频精品在线| 91免费视频播放| 激情懂色av一区av二区av| 我不卡一区二区| 国产精品2024| 美女黄色片视频| 国产综合自拍| 亚洲精品乱码久久久久久蜜桃91 | 久久99精品久久久久久久久久久久 | 性生活免费在线观看| 精品99视频| 亚洲人体一区| 秋霞在线一区| 91久久大香伊蕉在人线| 欧美xxx性| 欧美精品激情视频| 欧美人xxx| 亚洲午夜久久久久久久| 欧美 中文字幕| 欧美一级高清片在线观看| 中文字幕天堂在线| 欧美日韩亚洲高清| 欧美久久久久久久久久久久| 日本一区二区高清| 18禁裸乳无遮挡啪啪无码免费| 国产高清无密码一区二区三区| 一区二区三区国产免费| 国产日本精品| 美女扒开大腿让男人桶| 婷婷丁香综合| 亚洲精品视频一二三| 国产精品中文字幕亚洲欧美| 久久精品国产第一区二区三区最新章节| 国产麻豆一区二区三区| 国产日韩在线一区| 亚洲日本在线观看视频| 青青草原一区二区| 福利在线免费视频| 国内精品免费午夜毛片| 欧美性猛片xxxxx免费中国 | 久久综合一区二区三区| 91精品尤物| 高清国语自产拍免费一区二区三区| 国产精品一站二站| 97netav| 欧美视频精品全部免费观看| 成人午夜在线影院| 日韩一级特黄| 国产在线日韩在线| 成人四虎影院| 97国产成人精品视频| 素人av在线| 日韩在线中文字| 国产毛片av在线| 一本久久综合亚洲鲁鲁| 三级av在线播放| 亚洲精品中文字幕有码专区| 欧美特黄一级视频| 日韩欧美亚洲一区二区| 午夜久久久久久久久久| 91精品在线一区二区| 中文字幕在线观看免费| 欧美三级韩国三级日本三斤| 黄色大全在线观看| 91久久精品日日躁夜夜躁欧美| 日本中文字幕久久| 欧美性猛交视频| 韩国av中文字幕| 亚洲成人av一区| 特级毛片www| 欧美午夜精品久久久久久人妖 | 欧美性视频一区二区三区| 伊人中文字幕在线观看| 91精品办公室少妇高潮对白| 伊人色综合久久久| 欧美理论电影在线| 国产女人18毛片18精品| 精品少妇一区二区三区日产乱码| 亚洲第一色网站| 精品福利在线导航| 麻豆av电影在线观看| 一本大道亚洲视频| 老司机av在线免费看| 久久在线观看视频| 国产色播av在线| 日本道色综合久久影院| 日韩不卡在线| 91亚洲精品一区| 2020最新国产精品| 久久天堂国产精品| 99久久激情| www.欧美黄色| 国产精品久久久久9999高清| 日本黄色的视频| 国产成人在线看| 精品人妻一区二区三区日产| 国产欧美va欧美不卡在线| 国产又粗又猛又爽又黄的视频四季| 亚洲视频香蕉人妖| 懂色av懂色av粉嫩av| 亚洲3atv精品一区二区三区| 亚洲av无码精品一区二区| 在线精品国精品国产尤物884a| 99在线观看精品视频| 亚洲国产欧美一区二区丝袜黑人| 日韩大胆视频| 久久91亚洲人成电影网站| 亚洲v.com| 1卡2卡3卡精品视频| 日韩中出av| 亚洲一区二区四区| 国产精品夜夜夜| 爱豆国产剧免费观看大全剧苏畅 | 亚洲激情自拍| 啊啊啊国产视频| 豆国产96在线|亚洲| 潮喷失禁大喷水aⅴ无码| 一区二区激情视频| 天天干天天操天天操| 欧美电影精品一区二区| 国产精品毛片一区二区三区四区| 高清欧美性猛交xxxx黑人猛交| 主播大秀视频在线观看一区二区| 成人蜜桃视频| 午夜精品一区二区三区国产| 男人天堂1024| 国产成人99久久亚洲综合精品| 手机毛片在线观看| 午夜精品成人在线视频| 国产极品久久久| 在线电影欧美日韩一区二区私密| 国产啊啊啊视频在线观看| 91精品视频在线免费观看| 中文精品一区二区| 国产性生活免费视频| 国产真实乱子伦精品视频| 蜜桃无码一区二区三区| 亚洲成av人片一区二区| 国产美女裸体无遮挡免费视频| 亚洲日韩中文字幕在线播放| 理论片午夜视频在线观看| 亚洲自拍小视频| 不卡视频在线| 在线观看av网页| 久久精品夜夜夜夜久久| 日本少妇裸体做爰| 欧美精品一区二区三区蜜桃| 亚洲h片在线看| 超碰97国产在线| 亚洲91视频| 亚洲免费999| 自拍视频在线观看一区二区| 亚洲在线免费观看视频| 社区色欧美激情 | 日韩三区免费| 欧美日韩三区四区| 日韩中文欧美在线| 在线观看福利片| 亚洲精品成人悠悠色影视| 成人激情四射网| 久久6精品影院| 久久久亚洲欧洲日产| 国产高清av在线播放| 成人av在线资源| 日韩美一区二区| 亚洲免费视频在线观看| 日韩毛片在线| 天堂√在线观看一区二区| 久热国产精品| 99成人在线观看| 91精品国产美女浴室洗澡无遮挡| 日皮视频在线观看| 99精品国产一区二区| 影音先锋久久久| 91精品人妻一区二区| 色偷偷久久人人79超碰人人澡| 丁香婷婷在线观看| 国产精品入口日韩视频大尺度| 国产精品一线天粉嫩av| 加勒比av中文字幕| 亚洲综合激情小说| 青青青草网站免费视频在线观看| 日本高清视频精品| 欧美综合另类| 成人一区二区三区仙踪林| 亚洲v日本v欧美v久久精品| 国产中文在线视频| 国产欧美精品久久久| 911精品美国片911久久久| 蜜臀av粉嫩av懂色av| 欧美午夜激情在线| 黄黄的网站在线观看| 国产成人精品福利一区二区三区| 亚洲色诱最新| 影音先锋男人在线| 亚洲成人在线网| 亚洲www.| 亚洲成人在线视频网站| 国产传媒一区在线| 久久久精品免费看| 久久偷看各类女兵18女厕嘘嘘| 久久三级中文| 国产肥臀一区二区福利视频| 国产欧美日韩在线视频| 一区二区日韩在线观看| 欧美理论电影在线观看| 人人精品视频|