Ruby 3.3 リファレンスマニュアル

instance method IO::Buffer#&

self & mask -> IO::BufferRuby 3.2 から[permalink][rdoc][edit]
self | mask -> IO::Buffer
self ^ mask -> IO::Buffer

バッファの各バイトと mask の各バイトのビット演算(AND / OR / XOR)を行い、結果を格納した新しいバッファを返します。

返されるバッファの大きさは元のバッファと同じです。 mask が元のバッファより短い場合は、mask を先頭から繰り返し使います。

[PARAM] mask:
マスクを IO::Buffer で指定します。
[EXCEPTION] IO::Buffer::MaskError:
mask の大きさが 0 の場合に発生します。
# 4 バイトのマスクが 10 バイトに繰り返し適用される
buf = IO::Buffer.for("1234567890") & IO::Buffer.for("\xFF\x00\x00\xFF")
p buf.size                                              # => 10
p buf.get_string.bytes.map {|b| "%02x" % b }.join(" ")  # => "31 00 00 34 35 00 00 38 39 00"

[SEE_ALSO] IO::Buffer#and!, IO::Buffer#or!, IO::Buffer#xor!