将带有数字的文本文件转换为二进制

时间:2017-01-13 08:38:39

标签: binary ascii

我有一个双精度数的文本文件。数字由换行符分隔。

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

但这包含一个点符号。我不知道如何将其写入文件。

1 个答案:

答案 0 :(得分:5)

最直接的方法可能是使用Perl's pack

perl -e 'while(<>) {print(pack "d", $_)}'

或等效

perl -pe '$_ = pack "d", $_'

d表示

  

原生格式的双精度浮点数。

默认情况下,

print没有尾随换行符,因此这将输出对应于从标准输入读取的每一行的八字节块。有几种语言具有相似的功能,但perl应该无处不在。