Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

「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で入ってしまします。