次のように、改行で区切られたASCIIで書かれた長い整数のリストを含むファイルがあります。
-175
2
-19345
345592
-45
2355
など...
このファイルを同じ整数を含む「バイナリ」ファイルに変換して、実際の4バイト整数を作成したいと思います。
これを達成するためにどのコマンドラインツールを使用できますか?
答え1
perl -pe '$_=pack"l",$_' < infile > outfile
デフォルトのバイト順序を使用します。ビッグエンディアンの場合はl>
代わりに使用し、リトルエンディアンの場合は代わりに使用してください。l
l<
詳細についてはを参照してくださいperldoc -f pack
。
l
小文字であることに注意してくださいL
(長い整数1
)、数字ではありません。
$ printf '%s\n' 1234 -2 | perl -pe '$_=pack"l",$_'| od -vtd4
0000000 1234 -2
0000010
$ printf '%s\n' 1234 -2 | perl -pe '$_=pack"l>",$_'| od -vtx1
0000000 00 00 04 d2 ff ff ff fe
0000010
答え2
その他perl
:
$ perl -pe '$_ = pack("i", $_)' file
i
符号付き整数値(ネイティブCコンパイラによる最小4バイト)を表します。l
このようなオプションを使用してください@Stéphane Chazelasの返信常に32ビットを使用してください。