vim修改二進位檔案 先用vim以二進位格式開啟需要編輯或查看的檔案,不採用-b參數有時會導致轉換錯誤,詳見分隔線後部分。 www.2cto.com vim -b file-to-open.dat然後用xxd把檔案轉換成十六進位格式:%!xxd轉化後顯示類似如下 0000000: 5036 0a35 3932 2033 3230 0a32 3535 0a20 P6.592 320.255.0000010: 190e 2019 0e20 190e 2019 0e20 190e 2019 .. .. .. .. .. .0000020: 0e20 190e 2019 0e1f 180c 1f18 0c1f 180c . .. ...........0000030: 1f18 0c1f 180c 1f18 0c1f 180c 1f18 0c27 ...............'0000040: 1b0d 261a 0c24 1b0e 2319 0d22 180e 2017 ..&..$..#..".. .0000050: 0c1f 180c 1e16 0b25 1d16 251d 1620 1a13 .......%..%.. ..現在就可以對待普通文本一樣查看和編輯二進位檔案了。修改十六進位內容是不會導致右側字元改變;其實右側的文本只是給你參考的,修改了再將十六進位轉換回二進位,這些修改都會忽略。 www.2cto.com 修改完成使用xxd把十六進位轉換回二進位::%!xxd -r只有十六進位的修改會生效。****************分**********隔**********線**************** VIM顯示十六進位出錯在linux下用vim開啟jpg檔案,使用%!xxd進行16進位顯示時,檔案頭顯示為”3f3f3f3f 0011 0804″檔案尾端顯示為 “3f3f0a”;而同樣的操作在windows下,就顯示為”ffd8 ffc0 0011 0804″和 “ffd90a”,這才是正確的jpeg檔案頭和檔案尾標誌。很蹊蹺 !初時,我以為是jpeg在windows和linux下是不同的檔案頭,後來把jpg尾碼去掉,就一個純檔案,現象依舊。考慮可能不是作業系統的差異了。重新使用ghex開啟jpeg資料查看,發現顯示正常,為”ffd8 ffc0 00110804″和 “ffd9 0a”,正確。 www.2cto.com 估計應該是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。至此,困惑全部開啟。