使用Ruby BinData gem读取选项

iqih9akk  于 2023-01-04  发布在  Ruby
关注(0)|答案(3)|浏览(124)

我正在使用Ruby和BinData gem实现一个数据结构。我需要实现一个Choice值。根据BinData文档,可以选择如下实现:

class MyData < BinData::Record
  uint8  :type
  choice :data, :selection => :type do
    type key #option 1
    type key #option 2
  end
end

我需要在选择中有一个默认选项:

class MyRecord < BinData::Record
    uint8 :type
    choice :mydata, :selection => :type do
            uint32 0
            uint16 1
    end
end

如果type不是上面代码中的01,该如何处理?

tcomlyy6

tcomlyy61#

BinData 1.4.1使用:default本机处理此问题

class MyRecord < BinData::Record
  uint8 :data_type
  choice :mydata, :selection => :data_type do
    uint32 1
    uint16 2
    string :default, :read_length => 4
  end
end
iklwldmw

iklwldmw2#

嗯,我找到了一个工作。无论如何,任何其他的选择也是最受欢迎的。

class MyRecord < BinData::Record
    uint8 :data_type
    choice :mydata, :selection => :get_choice do
            uint32 1
            uint16 2
            string 255, :read_length => 4
    end

    def get_choice
            choices = [1, 2]
            if choices.include? data_type
                    return data_type
            else
                    return 255
            end
    end
end
8mmmxcuj

8mmmxcuj3#

你可以在构造函数中设置默认值。

相关问题