可以从BinData :: Record实例获取二进制数组吗?

时间:2013-08-20 08:37:34

标签: ruby binary bindata

我正在使用Ruby gem Bindata,使用以下代码:

require 'bindata'

class Rectangle < BinData::Record
  endian :little
  uint16 :len
  string :name, :read_length => :len
  uint32 :width
  uint32 :height
end

rectangle = rectangle.new
rectangle.len = 12

可以从rectangle实例获取像[0, 1, 1, 0, 0, ...]这样的数组,其中包含对象内所有字段的二进制表示形式吗?

1 个答案:

答案 0 :(得分:2)

BinData::Base#to_binary_s返回“此数据对象的字符串表示形式”

rectangle.to_binary_s
#=> "\f\x00\x00\x00\x00\x00\x00\x00\x00\x00"

这可以通过String#unpack转换为位字符串:

rectangle.to_binary_s.unpack('b*')
#=> ["00110000000000000000000000000000000000000000000000000000000000000000000000000000"]

或通过以下位数阵列:

rectangle.to_binary_s.unpack('b*')[0].chars.map(&:to_i)
#=> [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]