我有一个双精度数字的文本文件.数字由换行符分隔.
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*
数组(例如此处).
编辑2: 这个问题对整数提出了同样的问题,这更容易,因为二进制表示更简单.
编辑3:使用schaiba的提示可以将666.42转换为二进制数:
echo "obase=2;666.42" | bc 1010011010.011010
但这包含一个点符号.我不知道如何将其写入文件.
最直接的方法可能是使用Perlpack
:
perl -e 'while(<>) {print(pack "d", $_)}'
或者等价的
perl -pe '$_ = pack "d", $_'
.d
手段
原始格式的双精度浮点数.
并且print
默认情况下没有尾随换行符,因此这将输出与从标准输入读取的每一行相对应的八字节块.几种语言具有相似的功能,但perl
应该无处不在.