linux vim 16進位顯示有錯誤, 查看編輯二進位檔案時,務必加 -b 參數
今天需要看16進位檔案,調試中發現不對勁,經過多方對比,發現問題出 Vim 開啟二進位檔案時,需要加 -b 參數。
vim test.bin
:%!xxd //顯示16進位
0000000: 0300 0800 3c0d 0000 0100 1c00 3f05 0000 ....<.......?...0000010: 2700 0000 0000 0000 0000 0000 3f00 0000 '...........?...0000020: 0000 0000 0000 0000 1a00 0000 3400 0000 ............4...0000030: 4000 0000 4e00 0000 5a00 0000 6800 0000 @...N...Z...h...0000040: 3f00 0000 3f00 0000 3f00 0000 3f00 0000 ?...?...?...?...0000050: 0601 0000 1a01 0000 2e01 0000 5601 0000 ............V...0000060: 7001 0000 3f01 0000 3f01 0000 3f01 0000 p...?...?...?...0000070: 3f01 0000 0002 0000 1402 0000 5802 0000 ?...........X...0000080: 3f02 0000 3f02 0000 3f02 0000 3f02 0000 ?...?...?...?...0000090: 1603 0000 3803 0000 5a03 0000 7803 0000 ....8...Z...x...00000a0: 3f03 0000 3f03 0000 3f03 0000 3f03 0000 ?...?...?...?...00000b0: 1404 0000 3604 0000 7004 0000 3f04 0000 ....6...p...?...
vim -b test.bin
:%!xxd //顯示16進位
0000000: 0300 0800 3c0d 0000 0100 1c00 8805 0000 ....<...........0000010: 2700 0000 0000 0000 0000 0000 b800 0000 '...............0000020: 0000 0000 0000 0000 1a00 0000 3400 0000 ............4...0000030: 4000 0000 4e00 0000 5a00 0000 6800 0000 @...N...Z...h...0000040: 8600 0000 9800 0000 f000 0000 f400 0000 ................0000050: 0601 0000 1a01 0000 2e01 0000 5601 0000 ............V...0000060: 7001 0000 8401 0000 9a01 0000 b801 0000 p...............0000070: c801 0000 0002 0000 1402 0000 5802 0000 ............X...0000080: 8402 0000 b402 0000 d202 0000 f402 0000 ................0000090: 1603 0000 3803 0000 5a03 0000 7803 0000 ....8...Z...x...00000a0: 8c03 0000 a203 0000 e603 0000 fe03 0000 ................00000b0: 1404 0000 3604 0000 7004 0000 ba04 0000 ....6...p.......
按 short 顯示, 超過 7ffff的資料都會顯示錯誤
如果需要編輯,只有十六進位部分的修改才會被採用。右邊可顯示文本部分的修改忽略不計。
================================================================
編輯完了以後,我們需要還原為二進位檔案:
:%!xxd -r #參數-r是指將當前的十六進位轉換為二進位
好了,儲存退出:
:wq
一個真正的二進位編輯器用兩種方式來顯示文本: 二進位和十六進位格式。你可以在 Vim
裡通過轉換程式 "xxd" 來達到這效果。該程式是隨 Vim 一起發布的。
首先以二進位方式編輯這個檔案: