第三部・進階功能 / 3.3

十六進位與二進位編輯

按 Ctrl+P 可以把目前文件攤開成位元組看個清楚;而本來就不是文字的檔案,開啟時會直接進到這個檢視,並且可以真的改位元組。這兩件事的規則不一樣。

閱讀時間 約 14 分鐘 對象 要看位元組的人 先備知識 3.1 版本 v1.0 ・ 2026-08-26
3.3.1

兩種進入方式

你自己按 Ctrl+P,或是爾雅發現這根本不是文字檔。

① 文字檔按 Ctrl+P

唯讀。看到的就是「存檔時會寫進磁碟的那些位元組」,包含 BOM、目前編碼與 LF/CRLF 換行。

再按一次 Ctrl+P 或 Esc 回到文字編輯,游標會停在同一個位元組上。

② 二進位檔開啟時自動進入

無法以文字解碼、或含有 NUL 位元組的檔案,一開啟就是這個檢視,而且回不去文字編輯(本來就沒有文字可以編)。

小於 64 MiB 時可以改位元組;超過就維持串流唯讀(見 3.3.8)。

為什麼文字檔的十六進位是唯讀的

因為文字文件的內容存在文字緩衝區裡,位元組只是「它存出去會長怎樣」的呈現。要直接改位元組,那個檔案得本來就是二進位檔。想在文字檔裡改某個位元組,實務上的做法是回到文字編輯改字元,或用 F7 換編碼(見 3.1.2)。

3.3.2

畫面上有什麼

三欄:位移、位元組、可列印字元。

爾雅 Erya │ [報告.txt]
W 每列 16/32 O 位移 10/16 Ctrl+G/G 跳至位移 Ctrl+P/Esc 返回編輯
00000000 48 65 6C 6C 6F 2C 20 E4 B8 96 E7 95 8C 0A 41 42 |Hello, .......AB| 00000010 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 |CDEFGHIJKLMNOPQR| 00000020 53 54 55 56 57 58 59 5A 0A 0A E5 B7 A5 E4 BD 9C |STUVWXYZ........| 00000030 0A |. |
位移 0x1F / 0x31|每列 16 位元組 │ 十六進位 │ UTF-8 │ 報告.txt
已切換為十六進位檢視(唯讀)
欄位說明
位移欄這一列第一個位元組的位置。至少八位數,短檔案前面補零,看起來就像經典的 hex dump。
位元組欄每個位元組兩位十六進位。每八個一組,中間多一個空白好數。檔案結尾不足的位置留空白。
字元欄用 | 框起來。可列印的 ASCII 直接顯示,其他一律顯示成 .——所以中文會是一串點,因為一個中文字是三個位元組。

狀態列變成專屬格式:位移 目前/總計|每列幾位元組 │ 檢視種類 │ 編碼或模式 │ 檔名。游標所在的位元組在兩欄裡會同時反白。

3.3.3

唯讀檢視的四個按鍵

移動鍵照舊,另外四個是這個畫面專屬的。

按鍵做什麼
W每列 16 或 32 位元組之間切換。32 位元組需要 144 欄的終端寬度,不夠寬會維持 16 並顯示「畫面寬度不足,每列 32 位元組需要 144 欄」。
O位移欄改用十進位或十六進位顯示。訊息列說「位移欄改用 10 進位」。
G 或 Ctrl+G跳到指定位移(見 3.3.4)。
Ctrl+P 或 Esc回到文字編輯。
方向鍵 / PageUp PageDown依位元組、列、頁移動。
Home End移到這一列的第一個/最後一個位元組。
Ctrl+Home Ctrl+End移到檔案開頭/結尾。
大檔案只讀畫面上看得到的部分

十六進位檢視不會把整個檔案載進記憶體,只讀你正在看的那一段。所以拿它去看幾百 MB 的檔案也是瞬間的事。

3.3.4

跳到指定位移

支援四種寫法,因為十進位跟十六進位很容易搞混。

Enter 確認 Esc 取消 ←/→ 移動游標 Backspace/Delete 刪除字元
跳至位移(16 進位,可加 0x 前綴):1F40
你輸入會被當成
1F40照目前位移欄的進位解讀。位移欄是十六進位就當十六進位,是十進位就當十進位——輸入列的提示會寫現在是哪一種。
0x1F一律十六進位
$1F一律十六進位
1Fh一律十六進位
0d31一律十進位
  • 成功時訊息列說「已跳至位移 0x1F」。
  • 格式不對會說「位移格式錯誤;請輸入數字,或以 0x 前綴表示十六進位」,然後再問一次。
  • 超過檔案大小會停在結尾。
不確定進位時就寫前綴

從別的工具(xxd、除錯器、檔案格式規格書)抄來的位移多半是十六進位,直接補上 0x 最保險,不必先確認位移欄現在是哪一種。

3.3.5

二進位檔案自動進入

判斷方式很單純:前 8 KiB 裡有沒有 NUL 位元組。

爾雅 Erya │ [logo.png]
0-9A-F 位元組 I 覆寫/插入 BS/Del 刪除 W 16/32 O 10/16 G 位移 F11 關閉
00000000 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 |.PNG........IHDR| 00000010 00 00 01 90 00 00 01 90 08 06 00 00 00 80 BF 36 |...............6| 00000020 CC 00 00 00 09 70 48 59 73 00 00 0E C4 00 00 0E |.....pHYs.......|
位移 0x0 / 0x4A21|每列 16 位元組 │ 二進位 │ 覆寫 │ logo.png
已開啟二進位檔案 logo.png(19 KB),以十六進位檢視編輯
  • 提示列換成位元組編輯專用的那一組,最後直接寫出離開方式。
  • 狀態列的第二格是 二進位(不是「十六進位」),第三格是 覆寫/插入/唯讀。
  • 按 Esc 不會回到文字編輯——因為沒有文字編輯可以回去。它只會在訊息列再說一次離開方式:「二進位檔案只能以十六進位檢視;F11 關閉分頁、Ctrl+X 離開」。
UTF-16 檔案不會被當成二進位

UTF-16 文字檔滿滿都是 NUL,看起來很像二進位檔。爾雅會認出這個型態,直接回報「不支援的文字編碼」,而不是把它攤成可編輯的位元組——免得你以為那是二進位檔而改壞一份文字檔(見 3.1.1)。

3.3.6

改一個位元組

輸入兩個十六進位數字:先高半位元組,再低半位元組。

  1. 把游標移到要改的位元組上。兩欄會同時反白。
  2. 輸入第一個數字。例如要改成 4A,先按 4——高半位元組就位。
  3. 輸入第二個數字。按 A,這個位元組變成 4A,游標自動跳到下一個位元組。
  4. 兩次輸入算同一步復原。按一次 Ctrl+Z 就回到原本的值,不會只退一半。
按到不是十六進位的鍵

訊息列會說「請輸入十六進位數字(0-9、A-F)才能修改位元組」。可以輸入的只有 0–9 與 A–F(大小寫都行)。

儲存、復原、重做、另存新檔都沿用原本的快捷鍵(Ctrl+S、Ctrl+Z、Ctrl+Y、F12)。二進位文件沒有文字緩衝區,所以編碼轉換、換行轉換與雙欄比對都不適用,按了會說「十六進位檢視不支援這個動作」。

3.3.7

插入與刪除位元組

這個畫面有自己的 I 鍵,因為 Mac 鍵盤沒有 Insert。

按鍵做什麼
I(或 Insert)在覆寫與插入之間切換。狀態列第三格會跟著變。
Backspace刪除游標前面那個位元組
Delete刪除游標所在的位元組

覆寫模式(預設)

輸入的位元組蓋掉原本的,檔案長度不變。

改結構化格式(PNG、ZIP、韌體)時通常要維持長度,用這個。

插入模式

輸入的位元組插進去,後面整個往後推,檔案變長。

插入模式下游標可以停在最後一個位元組之後,方便在檔尾附加內容。

改二進位檔之前先備份

爾雅有 100 步復原,但檔案格式本身通常沒有容錯:長度錯一個位元組、校驗值沒跟著改,整個檔就壞了。改之前先 F12 另存一份,或在外面複製一份原檔。

3.3.8

大檔案維持串流唯讀

64 MiB 是同一條線,跟大型文字檔一致。

檔案開起來是能不能改
小於 64 MiB 的二進位檔位元組載入記憶體可以:改、插入、刪除、復原、儲存
64 MiB 以上的二進位檔串流讀取不行,唯讀。狀態列第三格顯示 唯讀
  • 開啟大型二進位檔時,訊息列說「已開啟二進位檔案 disk.img(4.2 GB),唯讀十六進位檢視」。
  • 試著修改會說「此二進位檔案為唯讀,無法修改」。
  • 提示列也會換成唯讀版本,最後標著「唯讀」兩個字。
這條線是為了記憶體上限

可編輯代表整份位元組要放在記憶體裡。爾雅寧可讓大檔維持唯讀,也不願意在你開一個 8 GB 映像檔時把機器拖垮——跟大型文字檔的取捨是同一套(見 3.2.3)。

3.3.9

常見錯誤

十六進位檢視最常見的七個狀況。

現象原因與處理
在文字檔的十六進位裡改不了東西對文字檔而言這個檢視是唯讀的(3.3.1)。
按 Esc 回不去這是二進位檔,沒有文字編輯可回。F11 關頁籤或 Ctrl+X 離開(3.3.5)。
按 W 沒有變成 32 位元組終端寬度不足 144 欄。放大視窗再按(3.3.3)。
跳位移跳到奇怪的地方輸入被當成另一種進位。加 0x 前綴(3.3.4)。
按了字母鍵說要輸入十六進位數字只有 0–9、A–F 能改位元組(3.3.6)。
中文在字元欄看起來是一堆點字元欄只顯示可列印的 ASCII,多位元組字元一律顯示成點(3.3.2)。
改完存檔,檔案打不開了二進位格式通常有長度與校驗要求。用備份還原(3.3.7)。