【问题标题】:Convert text file with numbers to binary将带有数字的文本文件转换为二进制文件
【发布时间】:2017-01-13 08:38:39
【问题描述】:

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

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

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

【问题讨论】:

  • 指针:echo "obase=2;$number" | bc
  • 不清楚您所说的“使用默认(系统)字节序”是什么意思。有许多可能的解释,这完全取决于您以后打算如何处理二进制文件。
  • @Alexander 我添加了更多解释。
  • 这是一个非常简单的问题,并且在第一次修订中。它要求将文本浮点数文件转换为连续的本机字节序 IEEE754 binary64。
  • @countermode 这个问题是Unix & Linux 的主题,不应该被迁移。

标签: binary ascii


【解决方案1】:

最直接的方法大概就是使用Perl's pack

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

或等效

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

d 表示

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

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

【讨论】:

  • 有没有类似的方法从二进制文件中获取原始文本文件?
  • @Beginner 你相信吗...unpack
猜你喜欢
  • 2014-07-30
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多