バイナリファイルをリトルエンディアンからビッグエンディアンに変換できるワンライナーはありますか?

バイナリファイルをリトルエンディアンからビッグエンディアンに変換できるワンライナーはありますか?

その逆。

関連があればRedHatを実行しています。

答え1

バイト交換を使用できますdd。これで十分ですか?それ以外の場合は、質問を更新して入力ファイルと予想される出力ファイルの例を提供してください。

echo hello >infile
dd conv=swab <infile >outfile

hex infile
   0000 68 65 6c 6c 6f 0a                                 hello.
hex outfile
   0000 65 68 6c 6c 0a 6f                                 ehll.o

答え2

このような変換を行うには、バイナリの内容が何を意味するのかを知る必要があるため、これはできません。

たとえば、バイナリファイルに文字列がある場合は変換しないでください。4バイト整数は2バイト整数とは異なる処理を必要とする可能性があります。

つまり、バイト順変換にはデータ型の記述が必要です。

答え3

ワード(32ビット)サイズを想定してファイルのバイト順序を変更するには、次の1行を使用します。

hexdump -v -e '1/4 "%08x"' -e '"\n"' input_file | xxd -r -p > output_file

答え4

ファイルの内容を気にせずにバイトを交換したい場合は、次のようにしてください。変換終了。これは標準のバイト変換関数を取り囲むラッパーであるため、2、4、8バイトの長さの整数の変換をサポートします。しかし、別のプロジェクトなので、ライナーではありません。

関連情報