我有一个双精度数的文本文件。数字由换行符分隔。
1.58589
0.04151
0.03562
0.02866
0.04479
0.01562
0.0219
0.01162
0.0089
0.0123
0.00621
-0.0135
-0.0046
-0.01052
-0.00873
0.0018
0.00436
....
如何将其转换为具有默认(系统)字节顺序的二进制文件?
编辑:
我不想压缩文件,只是确保连续存储双打,而文件中没有任何附加信息(标题等)。
目标是能够稍后将文件直接读入内存并进行重新解释以获得double*
数组(例如here)。
编辑2: This question对整数提出同样的问题,因为二进制表示更简单,所以更容易。
编辑3: 使用schaiba'提示可以将666.42转换为二进制数:
echo "obase=2;666.42" | bc
1010011010.011010
但这包含一个点符号。我不知道如何将其写入文件。
答案 0 :(得分:5)
最直接的方法可能是使用Perl's pack
:
perl -e 'while(<>) {print(pack "d", $_)}'
或等效
perl -pe '$_ = pack "d", $_'
。 d
表示
默认情况下,原生格式的双精度浮点数。
和print
没有尾随换行符,因此这将输出对应于从标准输入读取的每一行的八字节块。有几种语言具有相似的功能,但perl
应该无处不在。