十六進位(Hex)編碼解碼

將文字、檔案或原始位元組轉換為十六進位,也可以反向解碼。可以設定大小寫、分隔符以及 0x 或 \x 字首,解碼時會自動清理常見的 Hex 格式。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 選擇「編碼」把文字轉換為十六進位,或選擇「解碼」把十六進位還原為文字。
  2. 輸入或貼上內容,也可以開啟檔案,檢視其位元組的十六進位形式。
  3. 設定選項:「大寫」、分隔符(無、空格或冒號)以及字首(無、0x 或 \x)。
  4. 複製結果,或將結果下載為檔案。

什麼是十六進位(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.is4261736536342e6973
你好e4bda0e5a5bd

常見問題

如何把十六進位轉換為文字?

切換到「解碼」並貼上十六進位內容。空格、冒號以及 0x、\x 字首會被自動去除,位元組預設按 UTF-8 顯示為文字,也可以選擇其他文字編碼。

十六進位應該用大寫還是小寫?

兩者表示的位元組完全相同。RFC 4648 使用大寫,而很多程式語言預設輸出小寫。如果目標系統要求大寫,勾選「大寫」即可;解碼時兩種寫法都能識別。

為什麼十六進位比原資料長一倍?
每個位元組變成兩個字元,體積增加 100%,而 Base64 只增加約 33%。如果在意體積,可以用 Hex 轉 Base64 轉換。
這和把數字轉換為十六進位一樣嗎?
不完全一樣。本工具編碼的是位元組序列,例如一段文字的位元組。若要轉換單個整數(例如把 255 轉為 FF),請使用進位轉換器。