7

我试图了解 ID3 标签的工作原理,因此,在阅读了一些文档之后,我开始查看一些 mp3 的原始数据。Vim 通常是我选择的编辑器,所以,经过一番谷歌搜索后,我发现我可以使用 xxd 通过调用来查看我的文件的十六进制表示

:%!xxd  

一切正常,但是当我把一切都放回原处时

:%!xxd -r  

然后退出,我发现文件被修改了;vlc 无法再播放它,并且 diff 告诉我文件不同。我以为我无意中修改了一些东西,但进一步的实验表明,即使打开文件并使用 xxd 然后 xxd -r 会以某种方式更改文件。

这是为什么?我怎样才能防止它发生?难道我做错了什么?

4

3 回答 3

10

显然,如果您不打算将任何内容更改为文件,则可以退出vim使用:q!.

正如@RunHolt 指出的那样,vim可以xxd更改二进制文件。例如,将 LF 更改为 CRLF 或在文件末尾附加一个 LF 字符。

binary您可以通过设置选项来防止这种情况:

要么vim以:开头,要么在将文件加载到缓冲区之前vim -b filename键入。:set binary

于 2012-03-27T19:46:29.350 回答
2

您可能没有将文件加载为带有vim -b. 即损害已经造成。

xxd这里是红鲱鱼;xxd其次xxd -r 透明的。它用于编辑二进制文件。xxd不添加任何字节;它产生一个准确的十六进制转储,它被准确地反转xxd -r(除非你破坏它)。

仅供查看,您可以xxd从 shell 运行:

$ xxd binaryfile | vim -     # just use vim as a reader 

我已经编辑了可执行文件,vim -bxxd通过xxd -r. 他们跑得很好。

此外,xxd 是 Vim 发行版附带的特定于 Vim 的程序。知道它可能对您有用od,例如

od -tx1 file
于 2012-03-27T23:42:26.743 回答
1

在 Windows 二进制文件(不确定其他平台)上,:%!xxd将文件结束标记放在最后两个字节(0x0d,0x0a)中。由于某种原因%!xxd -r不会删除它们。

我经常手动删除它们(只需删除两个字符而不是 run %!xxd -r

可能是可以直接用xxd.

于 2012-03-27T19:40:13.870 回答