linux 16进制写文件,【Linux】vim以16进制打开和编辑文件

先用vim以二进制格式打开需要编辑或查看的文件,不采用-b参数有时会导致转换错误,详见分隔线后部分。

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  .......%..%.. ..

现在就可以对待普通文本一样查看和编辑二进制文件了。

修改十六进制内容是不会导致右侧字符改变;其实右侧的文本只是给你参考的,修改了再将十六进制转换回二进制,这些修改都会忽略。

修改完成使用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。

至此,困惑全部打开。

本博客所有文章如无特别注明均为原创。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值