2012-03-27 11 views
3

ID3タグの仕組みを理解しようとしていますので、いくつかのドキュメントを読んだ後、私はいくつかのmp3の生データを調べ始めました。 Vimは通常の選択の私のエディタですので、いくつかのグーグルの後、私はVimでxxdと一緒に使用するファイルを変更する

:%!xxd 

すべてがうまく働いたが、私は順番に戻ってすべてを置くときに呼び出すことによって、私のファイルの16進数表現を見ることがXXDを使用することができ判明しました

:%!xxd -r 

であり、ファイルが変更されていることがわかりました。 vlcはこれ以上再生できなくなり、diffはファイルが異なっていると私に言った。私は偶然何かを修正したと思ったが、それ以上の実験では、ファイルを開いてxxdを使い、次にxxd -rを使っても何とかファイルが変わってしまった。

なぜですか?どうしたらそれが起こらないようにすることができますか?私は何か間違っているのですか?

答えて

6

ファイルに何かを変更するつもりがない場合は、vim:q!を使用して終了することができます。

@RunHoltが指摘しているように、vimxxdはバイナリファイルを変更できます。例えばLFをCRLFに変更するか、ファイルの末尾にLF文字を追加します。

あなたはbinaryオプションを設定することでこれを防ぐことができます。どちらか

をとしてvim開始:バッファにファイルをロードする前にvim -b filenameやタイプ:set binaryを。

+0

バイナリオプションを使用すると、すべて正常に動作しました。そして、はい、私は使用することができます知っている:q!終了するには、主なアイデアは、vimを介してファイルを変更することができたので、私は必要に応じてファイルを保存する方法を見つける必要がありました。どうもありがとうございました! – Odexios

+0

@Odexios:どうぞよろしくお願いいたします。おそらく ':q! 'コマンドについて言及してはいけませんでしたが、わからないことがあります。最も明白なものが見つからないことがあります。 –

1

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

xxdに直接固定することができなものになるかもしれません(%!xxd -rを実行するよりも、単に両方の文字を削除します)。

+0

私は現在Linuxマシンを使用しています。私は未加工のデータ編集にはまったく新しいので、盲目的にあなたの助言に従おうとしました。ストリームの最後に0x0aが見つかりましたが(0x0dはありません)、それを削除しても何も変更されませんでした。とにかく、XDとは何か変わったと思いますが、diffを使って違いがどこにあるのかを確認しようとしましたが、変更されたバイト数が多いようです。 – Odexios

2

おそらくファイルをvim -bというバイナリファイルとしてロードしていない可能性があります。私。その被害は既に行われていた。

xxdはここでは赤い鳴きです。 xxdに続いてxxd -rは、である。バイナリファイルの編集を目的としています。 xxdはバイトを追加しません。正確な六角ダンプが生成されます。壊れた場合を除いて、正確に逆転されます(xxd -r)。

閲覧のみの場合は、あなただけのシェルからxxdを実行することができます:

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

を私はxxdとバックxxd -r貫通vim -bとフィルタリングを実行可能ファイルを編集しました。彼らはうまく走った。

また、xxdはVimディストリビューションに付属するVim固有のプログラムです。あなたはod、eを知ることが有用かもしれません。g

od -tx1 file 
+0

わからなかった!また、ファイルがすでに開かれた後( 'xxd'の前)に' bin 'を設定することもできます。 – RunHolt

関連する問題