0

我正在使用 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, ...]对象内所有字段的二进制表示?

4

1 回答 1

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]
于 2013-08-20T09:05:26.837 回答