ruby - 在 Ruby 中解析二进制数据

标签 ruby binary

我们正在对一个以前用 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/

相关文章:

python - 如何在 Python 中将二进制向量旋转到最小值

arrays - Ruby:删除哈希数组中的空括号

ruby-on-rails - Ruby on Rails - 计算数字范围的大小

c# - 二进制数转十进制(效果不好,为什么?)

scala - Scala中的整数到二进制

c++ - (c++) 使用 ifstream 将 .dat 文件读取为十六进制

html - 我如何使用 Nokogiri 解析 Google 搜索结果?

ruby - 如何在 Ruby 中执行相当于 's3cmd ls s3://some_bucket/foo/bar' 的操作?

ruby - Jekyll Liquid - 动态访问 _config.yml

Java:parseByte到一个字节,反之亦然返回不同的值