Ruby_Array_40

この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。

class Array (Ruby 3.0.0 リファレンスマニュアル)

インスタンスメソッド

pack(template) -> String
pack(template, buffer: String.new) -> String
  • 配列の内容をtemplateで指定された文字列にしたがって、バイナリとしてパックした文字列を返す
    • templateは型指定文字列とその長さ(省略時は1)を並べたもの
      • 長さとして*を指定した場合は「残りのデータすべて」の長さを表す
  • bufferが指定されている場合、バッファとして使って返り値として返す
    • "バッファとして使って"ってどういう意味?
  • templateの最初にオフセット(@)が指定されていれば、結果はオフセットの後ろから詰められる
    • bufferの元の内容がオフセットより長ければ、オフセットより後ろの部分は上書きされる
    • bufferの元の内容がオフセットより短ければ、足りない部分は"\0"で埋められる
irb(main):001:0> ['!'].pack('A')
=> "!"

irb(main):002:0> ['!'].pack('A1')
=> "!"

irb(main):003:0> ['!'].pack('A2')
=> "! "

irb(main):004:0> ['!'].pack('A2').size
=> 2
irb(main):001:0> ['!'].pack('A', buffer: 'xyz')
=> "xyz!"

irb(main):002:0> ['!'].pack('A1', buffer: 'xyz')
=> "xyz!"

irb(main):003:0> ['!'].pack('A2', buffer: 'xyz')
=> "xyz! "

irb(main):004:0> ['!'].pack('A2', buffer: 'xyz').size
=> 5
irb(main):001:0> ['!'].pack('@A')
=> "\x00!"

irb(main):002:0> ['!'].pack('@A1')
=> "\x00!"

irb(main):003:0> ['!'].pack('@A2')
=> "\x00! "

irb(main):004:0> ['!'].pack('@A2').size
=> 3
irb(main):001:0> ['!'].pack('@A', buffer: 'xyz')
=> "x!"

irb(main):002:0> ['!'].pack('@A1', buffer: 'xyz')
=> "x!"

irb(main):003:0> ['!'].pack('@A2', buffer: 'xyz')
=> "x! "

irb(main):004:0> ['!'].pack('@A2', buffer: 'xyz').size
=> 3

メモ

  • 内容もパッと理解できないし、使い所もイメージできない
    • バイナリ、オフセット、バッファ、っていう単語の説明を合わせて書いて欲しい
  • ドキュメントにはtemplateの説明がたくさん書いてあるが、理解できていないのでまとめない。あとまわし。