ファイルのバイナリをテキストエディタに出力

ファイルのバイナリをテキストエディタに出力

xxd -b端末コマンドを使用してファイルのバイナリを表示できることを読みました。このコマンドを使用しましたが、バイナリファイルが表示されましたが、バイナリ以外のファイルは左側に行番号で表示され、バイナリ以外のファイルは右側にリストされています。コンピュータがファイルを読み取るときにファイルのバイナリを読み、そのバイナリをテキストエディタに出力してから、テキストエディタからバイナリを返したいと思います。どんな提案がありますか? AppleScriptを使用して同様の操作を実行できますか?

答え1

コンピュータがファイルを読むのと同じように、ファイルのバイナリを簡単に読みたいのです。

これは実際には不可能です。どこかで、コンピュータはこれを2つの異なる電圧レベルに読み込みます。もちろん、ユーザーはこれを見ることはできません。はるかに遅いコンピュータ(今日の一般的なマルチGHzコンピュータではない)の場合、高帯域幅オシロスコープを接続してほぼコンピュータのように見て読んでください。しかし、それは電子工学に関する質問であり、確かに有用な答えではありません。最後に、どのモニターに表示される方法は抽象化です。電子デバイスが実際に毎秒処理する数千億または数兆の電圧変化を直接認識する方法はありません。

バイナリデータを編集する一般的な方法は、16進エディタを使用して16進データを編集することです。 16進数は人間にとってより簡単なので(はるかに短い)使用されますが、まだビットに直接対応しています。 16進数(0-9a-f)の各「ニブル」は、正確に4ビットを表します。これを表示する伝統的な方法は、次の方法で行われますxxd。編集中のバイナリファイルを理解するために必要なほとんどすべてを表示します。左側にはファイルの位置(オフセット)が何であるか、テキストの場合(バイナリファイルで一般的)、中間には生のバイナリデータ(16進数で表される)があります。xxdバイナリモードも同様に機能しますが、16進数の代わりにビットを使用します。

本当に役に立つ情報だけを削除したい場合は、xxd16進モード()を選択できますが、-pバイナリモードは選択できません。あなたが使用できるcut

$ echo 'Hello, world'  | xxd  -b | cut -c 11-63
01001000 01100101 01101100 01101100 01101111 00101100
00100000 01110111 01101111 01110010 01101100 01100100
00001010                 

または、次のようにフォーマットが本当に望まない場合:

perl -nE 'print unpack("B*", $_); END { print "\n"; }'

(反転でperl -nE 'print pack("B*", $_);'

ただし、バイナリデータを理解または編集したい場合は、16進エディタが汎用ツールに最適な選択です。

ちなみに:バイナリ→テキストエディタ→バイナリは16進モードで簡単ですxxd -r。上記のPerlフラグメントはバイナリに対してこれを行います。

$ echo 'Hello, world!' | perl -nE 'print unpack("B*", $_); END { print "\n"; }' | tee /dev/stderr | perl -nE 'print pack("B*", $_);'
0100100001100101011011000110110001101111001011000010000001110111011011110111001001101100011001000010000100001010
Hello, world!

私はteeそれらの間に渡されたビットを示すためにそこに入れました。以下と比較して、どのくらい理解するのが難しいかを確認してくださいxxd

$ echo 'Hello, world!' | xxd | tee /dev/stderr | xxd -r
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 210a       Hello, world!.
Hello, world!

関連情報