我有一个文件,其中包含一长串以 ascii 编写的整数,并用换行符分隔,如下所示:
-175
2
-19345
345592
-45
2355
ETC...
我想将此文件转换为包含相同整数的“二进制”文件,写入实际的 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
表示有符号整数值(至少表示 4 个字节,取决于本地 C 编译器)。使用l
像这样的选项@Stéphane Chazelas 的回答始终使用 32 位。