ruby - 将 radix-2 数字字符串数组写入 Ruby 中的二进制文件

标签 ruby io bindata

我用 Ruby 编写了一个简单的 Huffman 编码。作为输出,我有一个数组,例如:

["010", "1111", "10", "10", "110", "1110", "001", "110", "000", "10", "011"]

我需要将它写入文件,然后从文件读取。我尝试了几种方法:

IO.binwrite("out.cake", array)

我得到一个简单的文本文件而不是二进制文件。

或者:

File.open("out.cake", 'wb' ) do |output|
  array.each do | byte |
       output.print byte.chr
  end
end

这看起来可行,但后来我无法将其读入数组。

我应该使用哪种编码?

最佳答案

我认为您可以像下面的代码一样使用Array#packString#unpack:

# Writing
a = ["010", "1111", "10", "10", "110", "1110", "001", "110", "000", "10", "011"]
File.open("out.cake", 'wb' ) do |output|
  output.write [a.join].pack("B*")
end

# Reading
s = File.binread("out.cake")
bits = s.unpack("B*")[0] # "01011111010110111000111000010011"

我不知道您喜欢的阅读结果格式,我知道上述方法效率低下。但无论如何,您可以从 unpack 的结果中按顺序取“0”或“1”来遍历您的哈夫曼树。

关于ruby - 将 radix-2 数字字符串数组写入 Ruby 中的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16821435/

相关文章:

ruby - 如何从 Ruby 内部检查 RVM 版本?

ruby-on-rails - 如何修改 Rails datetime_select 帮助器的输入类型?

c - 在 C 中读取文件的最快方法

io - 对为旧计算机编写的延迟函数进行逆向工程

ruby - 使用 Ruby 逐行读取、编辑和写入文本文件

ruby - 使用 Ruby BinData gem 读取选项

r - 如何计算生成相关二元变量的边际概率

ruby - 以深度优先顺序生成数组笛卡尔积的算法

ruby - 在 sequel/ruby 中难以捕获 postgresql 异常