我们正在对之前用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)
确实有很多,我宁愿不用手工转换它们......
答案 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代码。