選択肢がまさにここで必要なものかどうかはわかりませんが、何をしようとしているのかを説明します。私は正常に動作する次の BinData 構造を持っています。
class Property < BinData::Record
endian :little
int32 :name_len
string :name, :read_length => :name_len
int32 :type_len
string :type, :read_length => :type_len
int64 :data_len
end
ただし、:data_len を取得したら、実際のデータを取得する必要があります。次に来るものをどのように処理するかは、:type 文字列の値によって異なります。
- type が "IntProperty" の場合、次の 4 バイト (int32) は int です。
- type が "FloatProperty" の場合、次の 4 バイト (float_32) は float です。
- type が "StringProperty" の場合、次の 4 バイト (int32) は int (文字列の len) であり、次の (len * 8) は文字列そのものです。
- type が "ArrayProperty" の場合、次の 4 バイト (int32) は int (配列の len) であり、次のバイト数は多くの Property オブジェクト (配列に格納するため) の配列の len です。
これらのパスをナビゲートして BinData::Record を適切に設定する方法を理解するのを手伝ってくれる人はいますか?