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

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

时间: 2024-10-24 13:31:42

vim 以16进制进行文件编辑的相关文章

读取16进制文件和校验图片格式的问题。 文件名后缀

概要: 前段时间,要做这样一个校验:当不符合要求的文件,通过修改文件后缀名后,仍然不允许上传. 我想这是大家经常会遇到的一个校验问题.我才用的办法是:用16进制读取文件头部(不妨成为head),比较head和常见文件头部16进制编码,进行判断. 我个人认为,这个校验方法有弊端,例如当两中不同的文件的文件头编码一样时,一种符合上传要求,一种不符合上传要求,起不到校验功能,例如office 2007和zip. 但是这个方法还是很实用的,毕竟文件头一样的不同文件总是不多的,而且在网站上传是碰到的就更少

Notepad++ 16进制编辑功能

Notepad++可以编辑PE文件(二进制文件即HEX码),2进制.16进制都可以,通过附加的组件HexEditor即可实现. Hex Editor下载  Hex Editor下载页面,包括各个历史版本和源代码,UNI.ANSI等 http://sourceforge.net/projects/npp-plugins/files/Hex%20Editor/ Hex Editor使用说明 解压缩后把HexEditor.dll文件复制到安装目录(如C:\Program Files\Notepad++

16进制文件转化对比

做通讯项目的时候,经常要进行数据收发校验.发送端的数据通过复杂的通讯系统(例如OFDM系统),依次进行交织.编码(LDPC).映射.IFFT.串并转换……等等,达到接收端,我们只有通过反复的对比才能验证流程的正确性.因为数据的收发都是比特流,所以经常使用16或者二进制文件进行比较. 很多调试工具都支持数据导出,由于某些原因他们支持的导出格式各不相同.例如:code composer studio支持比较全面,但是NIOS II  IDE数据格式只支持16进制导出,quarutus ii等支持也各

Hex Workshop 6.7.2绿色版(16进制编辑利器)

软件名称: Hex Workshop 6.7.2绿色版(16进制编辑利器) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.8MB 图片预览: 软件简介: Hex Workshop是一款非常专业的十六进制编辑器,功能强大的开发工具,可以方便地进行十六进制编辑.插入.填充.删除.剪切.复制和粘贴工作,配合查找.替换.比较以及计算校验和等命令使工作更加快捷.速度快,算法精确,并附带计算器和转换器工具.此软件分为32位和64位版本,64位系统可用运行32

Nginx将utf8编码的url解码成\x的16进制格式导致无法匹配静态文件的问题处理

例如请求/touch/article/北京/full.html,到达nginx后变成/ /touch/article/%E5%8C%97%E4%BA%AC/full.html, Nginx静态文件配置: location ~* ^/touch/article/.*\.html$ { expires -1; root /home/htmlfile; charset UTF-8; if ( !-f $request_filename ){ proxy_pass http://client.api.c

Hex Workshop(16进制编辑利器) 6.7.2绿色版

软件名称: Hex Workshop 6.7.2绿色版(16进制编辑利器) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.8MB 图片预览: 软件简介: Hex Workshop是一款非常专业的十六进制编辑器,功能强大的开发工具,可以方便地进行十六进制编辑.插入.填充.删除.剪切.复制和粘贴工作,配合查找.替换.比较以及计算校验和等命令使工作更加快捷.速度快,算法精确,并附带计算器和转换器工具.此软件分为32位和64位版本,64位系统可用运行32

从文件读入16进制数转化为10进制数再输出到文件中

sSN LMDscandata 1 1 B98C27 0 0 85C0 85C3 F55D73C5 F55DCC81 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 DBBA0 1388 B5 136C 1373 136B 1389 1398 1356 136D 1386 137B 139C 13C4 13F7 1531 174D 1751 1755 1765 176C 1777 177B 1784 1791 1796 17A8 17C0 17C6

MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

1.编辑框添加变量,并选择变量类型为CString. 2.  使用"_tcstoul"函数将Cstring 类型转换为16进制/10进制数进行计算. 原文地址:https://www.cnblogs.com/lize19940412/p/10068273.html

C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。

转自https://blog.csdn.net/liubowei_0312/article/details/53378146 适合将文件写入数据库,远程访问的时候还原1.首先把文件转成十六进制文件流 public void FileToStream() { try { IPdfClassBll pdfClassBll = DataFactory.GetPdfClass(); FileStream fs = new FileStream(@"文件路径/***.PDF", FileMode