先用vim以二進制格式打開需要編輯或查看的文件,不採用-b參數有時會導致轉換錯誤,詳見分隔線後部分。
vim -b file-to-open.dat
然後用xxd把文件轉換成十六進制格式
:%!xxd
轉化後顯示類似如下
1 2 3 4 5 6 |
|
現在就可以對待普通文本一樣查看和編輯二進制文件了。
修改十六進制內容是不會導致右側字符改變;其實右側的文本只是給你參考的,修改了再將十六進制轉換回二進制,這些修改都會忽略。
修改完成使用xxd把十六進制轉換回二進制:
:%!xxd -r
只有十六進制的修改會生效。
****************分**********隔**********線****************
VIM顯示十六進制出錯
在linux下用vim打開jpg文件,使用%!xxd進行16進制顯示時,文件頭顯示爲"3f3f
3f3f 0011 0804"文件尾端顯示爲 "3f3f
0a";而同樣的操作在windows下,就顯示爲"ffd8 ffc0 0011 0804"和 "ffd9
0a",這纔是正確的jpeg文件頭和文件尾標誌。
很蹊蹺 !
初時,我以爲是jpeg在windows和linux下是不同的文件頭,後來把jpg後綴去掉,就一個純文件,現象依舊。考慮可能不是操作系統的差異了。
重新使用ghex打開jpeg數據查看,發現顯示正常,爲"ffd8 ffc0 0011
0804"和 "ffd9 0a",正確。
估計應該是vim的問題了。
3f的ascii碼是?,那表示vim對文件頭、尾沒有正常解析,是不是和vim解析文件時用的編碼格式有關係呢?
打開.vimrc配置項,屏蔽掉下面這句話:
set fileencodings=utf-8,gb2312,gbk,gb18030,ucs-bom
再用vim打開jpeg文件,顯示"ffd8 ffc0 0011 0804"和 "ffd9 0a",
顯示正確。
原來,爲了支持識別和顯示中文,我規定了vim的fileencodings,
當vim打開文件時,會使用規定的編碼格式對數據進行解析,可惜jpeg的文件頭FFD8、尾FFD9
不是任何一箇中文的編碼,vim找不到對應的中文字,就顯示爲??,即:3f3f。
至此,困惑全部打開。
分隔線後部分轉自 http://www.cnblogs.com/lidp/archive/2009/06/26/1697873.html
另外我們可以使用hexdump去查看對應文件的16進制值
maze@maze-VirtualBox:/mnt/share_windows/display-test$ cat b.txt
abcd
maze@maze-VirtualBox:/mnt/share_windows/display-test$ cat b.txt |hexdump
0000000 6261 6463 000a
0000005
需要注意,這個時候左邊高位,右邊是低位;
我們在使用vim以16進制讀寫的時候,左邊是低位,右邊是高位!
RGB格式的圖像存儲的順序,並非像字面的順序,而是以:B、G、R的順序進行存儲。