Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

「BinData」のArray型は連続する短いデータの取り扱い時に便利

「BinData」のArray型は連続する短いデータの取り扱い時に便利です。

使い方

16進数リテラルで渡す

16進数リテラルで渡します

data = "\x03\x04\x05\x06\x07\x08\x09"

これを読み込むと

ary = BinData::Array.new(:type => :uint8, :read_until => :eof)
ary.read(data)
#>> [3, 4, 5, 6, 7, 8, 9]

と、内部的に配列で持ってくれます。
あとは、普通の配列として扱えば良いです

ary[0]
#>> 3
ary[5]
#>> 8
ary[-1]
#>> 9

配列で渡す

配列のまんま渡す場合はassingメソッドを使います。
内部的に、to_aryが使えれば読み出し可能なようです。

ary.assign([3,5,8])
ary
#>> [3, 5, 8]

文字列を渡すとどうなるか

試しに文字列を渡すと

data = "1234"
#>> "1234"

ary.read(data)
#>> [49, 50, 51, 52]

と、Asciiで入ってしまします。