在Ruby中解析二进制数据

我们正在对之前用C语言编写的项目进行重大改写.我们有一堆C结构,写成C typedef:

struct my_struct {
    uint32_t foo;
    uint8_t bar;
    char baz[80];
}

有没有一种快速的方法可以在Ruby中加载它们?例如,有没有办法将这些定义转换为类似代码的东西

@foo = io.read(4).unpack('V')[0]
@bar = io.read(1).unpack('C')[0]
@baz = io.read(80)

实际上有很多它,我宁愿不用手工转换它们……

最佳答案 使用
BinData.

class MyStruct < BinData::Record
    endian :little
    uint32 :foo
    uint8  :bar
    string :baz, read_length: 80
end

它几乎是C结构和BinData Records之间的1:1映射.编写转换脚本应该很容易.

点赞