zoukankan      html  css  js  c++  java
  • vim 以16进制进行文件编辑

    vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的形式即可。

    可分如下几步进行:

    (1) 首先以二进制方式编辑这个文件: vim -b datafile

    (2) 现在用 xxd 把这个文件转换成十六进制: :%!xxd

    文本看起来像这样:

    0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
    0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
    0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.

    现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。

    (3) 最后,用下面的命令把它转换回来: :%!xxd -r

    只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。

    xxd是linux的一个命令,VIM 编辑二进制文件 (

    *23.4* 二进制文件

    你可以用 Vim 本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,其它的就跟原来那个一模一样。

    要保证 Vim 时加上 ”-b” 参数:

    
    这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth'设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。

    二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运行出问题。用 “R” 命令进入替换模式。

    文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:

    :set display=uhex

    另外,也可以用命令 “ga” 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,该命令的输出看起来就像这样:

     <^[>  27, Hex 1b,  Octal 033 

    文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果:

            :set nowrap

    字节位置:

    要发现你在文件中的当前字节位置,请用这个命令:

    g CTRL-G

    其输出十分冗长:

        Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 

    最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'选项导致换行符字节不同的影响。

    要移到文件中某个指定的字节,请用 “go” 命令。例如,要移到字节 2345:

    2345go

    使用XXD:

    一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 里通过转换程序 “xxd” 来达到这效果。该程序是随  一起发布的。

    首先以二进制方式编辑这个文件:

    
    现在用 xxd 把这个文件转换成十六进制:
            :%!xxd

    文本看起来像这样:

            0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI 
            0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0 
            0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59. 

    现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。

    最后,用下面的命令把它转换回来:

    :%!xxd -r

    只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/reddusty/p/4850391.html
Copyright © 2011-2022 走看看