我们正在对一个以前用 C 语言编写的项目进行重大重写,将其改写为 Ruby。我们有一堆 C 结构,写成 C 类型定义:
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 记录之间的 1:1 映射。编写转换脚本应该很容易。
关于ruby - 在 Ruby 中解析二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949245/