7

ID3タグがどのように機能するかを理解しようとしているので、いくつかのドキュメントを読んだ後、mp3の生データを調べ始めました。Vimは通常私の選択するエディターなので、グーグルした後、xxdを使用して、呼び出すことでファイルの16進表現を表示できることがわかりました。

:%!xxd  

すべてが正常に機能しましたが、すべてを元に戻すと

:%!xxd -r  

やめると、ファイルが変更されていることがわかりました。vlcはそれを再生できなくなり、diffはファイルが異なると教えてくれました。誤って何かを変更したと思ったのですが、さらに実験を重ねたところ、ファイルを開いてxxdを使用してからxxd -rを使用しても、ファイルが何らかの形で変更されることがわかりました。

何故ですか?どうすればそれを防ぐことができますか?私は何か間違ったことをしていますか?

4

3 に答える 3

10

明らかに、ファイルに何も変更するつもりがない場合は、のvim使用をやめることができます:q!

@RunHoltが指摘しているようにvimxxdバイナリファイルを変更できます。たとえば、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正確な16進ダンプが生成されますが、これは(破損していない限り)によって正確に逆になります。

xxd表示のみの場合は、シェルから実行できます。

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

で実行可能ファイルを編集しvim -b、フィルタリングを行っxxdたり戻したりしxxd -rました。彼らはうまく走った。

また、xxdはVimディストリビューションに付属するVim固有のプログラムです。od知っておくと便利かもしれません。

od -tx1 file
于 2012-03-27T23:42:26.743 に答える
1

Windowsバイナリファイル(他のプラットフォームについては不明)では、:%!xxdファイルの終わりマーカーを最後の2バイト(0x0d、0x0a)に配置します。何らかの理由%!xxd -rでそれらを削除しません。

私はしばしばそれらを手動で削除します(実行するよりも両方の文字を削除するだけです%!xxd -r

で直接修正できるものかもしれませんxxd

于 2012-03-27T19:40:13.870 に答える