使用方法
- 選擇「編碼」把文字轉換為十六進位,或選擇「解碼」把十六進位還原為文字。
- 輸入或貼上內容,也可以開啟檔案,檢視其位元組的十六進位形式。
- 設定選項:「大寫」、分隔符(無、空格或冒號)以及字首(無、0x 或 \x)。
- 複製結果,或將結果下載為檔案。
什麼是十六進位(Base16)?
十六進位使用 16 個符號:數字 0 到 9 和字母 A 到 F。每個十六進位數字承載 4 位,所以每個位元組正好寫成兩位,從 00 到 FF。編碼後的體積是原資料的兩倍,比 Base64 和 Base32 都大,但位元組邊界一目瞭然,這也是偵錯程式、十六進位編輯器和網路工具都用它顯示資料的原因。
RFC 4648 將這種編碼標準化為 Base16,使用大寫字母表,沒有填充。實際使用中小寫同樣常見,包括本工具在內的解碼器都能同時接受兩種寫法。
十六進位的常見用途
- 雜湊與金鑰。SHA-256 摘要有 32 個位元組,寫成 64 個十六進位字元。金鑰、UUID 和校驗和通常也用十六進位表示。
- 硬體地址。MAC 地址是 6 個位元組的十六進位,一般用冒號分隔,選擇冒號分隔符即可得到這種格式。
- 轉義序列。C、Python 和 JavaScript 字串中可以用
\x加兩位十六進位數字表示一個位元組,\x字首選項生成的正是這種寫法。 - Web 格式。
#FF8800這樣的 CSS 顏色就是 3 個位元組的十六進位,URL 百分號編碼則把位元組寫成%加兩位十六進位數字。
把十六進位解碼為文字
解碼器對格式很寬容:大小寫均可,會忽略空格、換行、逗號、冒號、分號和連字元,並去掉 0x、\x、% 和 &#x 字首。xxd -p 的輸出、MAC 地址、UUID、逗號分隔的 0x 列表、%XX 轉義和 HTML 十六進位實體都可以直接貼上。每個位元組需要兩位數字,位數為奇數時會報錯。解碼出的位元組按所選的文字編碼顯示為文字。
如果想在不經過文字的情況下轉換編碼,可以使用 Hex 轉 Base64 或 Base64 轉 Hex。
在程式碼中使用十六進位
# Python
'Hi'.encode().hex() # '4869'
bytes.fromhex('4869').decode() # 'Hi'
// Node.js
Buffer.from('Hi').toString('hex') // '4869'
Buffer.from('4869', 'hex').toString('utf8') // 'Hi'
# Shell
printf 'Hi' | xxd -p # 4869
編碼規格
| 字母表 | 0-9 A-F |
|---|---|
| 輸出體積 | 每位元組 2 個字元(200%) |
| 填充 | 無 |
| 標準 | RFC 4648 第 8 節 |
| 區分大小寫 | 否 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | 48656c6c6f2c20576f726c6421 |
Base64.is | 4261736536342e6973 |
你好 | e4bda0e5a5bd |
常見問題
如何把十六進位轉換為文字?
切換到「解碼」並貼上十六進位內容。空格、冒號以及 0x、\x 字首會被自動去除,位元組預設按 UTF-8 顯示為文字,也可以選擇其他文字編碼。
十六進位應該用大寫還是小寫?
兩者表示的位元組完全相同。RFC 4648 使用大寫,而很多程式語言預設輸出小寫。如果目標系統要求大寫,勾選「大寫」即可;解碼時兩種寫法都能識別。
為什麼十六進位比原資料長一倍?
每個位元組變成兩個字元,體積增加 100%,而 Base64 只增加約 33%。如果在意體積,可以用 Hex 轉 Base64 轉換。
這和把數字轉換為十六進位一樣嗎?
不完全一樣。本工具編碼的是位元組序列,例如一段文字的位元組。若要轉換單個整數(例如把 255 轉為 FF),請使用進位轉換器。