我有一个双精度数字的文本文件.数字由换行符分隔.
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
....
Run Code Online (Sandbox Code Playgroud)
如何将其转换为具有默认(系统)字节顺序的二进制文件?
编辑:
我不想压缩文件,只需确保连续存储双打,而文件中没有任何附加信息(标题等).
目标是能够稍后将文件直接读入内存并进行重新解释转换以获得double*数组(例如此处).
编辑2: 这个问题对整数提出了同样的问题,这更容易,因为二进制表示更简单.
编辑3:使用schaiba的提示可以将666.42转换为二进制数:
echo "obase=2;666.42" | bc
1010011010.011010
Run Code Online (Sandbox Code Playgroud)
但这包含一个点符号.我不知道如何将其写入文件.
最直接的方法可能是使用Perlpack:
perl -e 'while(<>) {print(pack "d", $_)}'
Run Code Online (Sandbox Code Playgroud)
或者等价的
perl -pe '$_ = pack "d", $_'
Run Code Online (Sandbox Code Playgroud)
.d手段
原始格式的双精度浮点数.
并且print默认情况下没有尾随换行符,因此这将输出与从标准输入读取的每一行相对应的八字节块.几种语言具有相似的功能,但perl应该无处不在.