我们正在对之前用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映射.编写转换脚本应该很容易.