在Ruby

时间:2016-03-11 20:23:00

标签: ruby binary

我们正在对之前用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)

确实有很多,我宁愿不用手工转换它们......

2 个答案:

答案 0 :(得分:2)

使用BinData

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

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

答案 1 :(得分:0)

如果你有很多,你可能想编写一个快速程序来解析C代码:)

然后解析代码可以从C代码创建相应的ruby代码。