class Ronin::Support::Binary::Union
@note This class provides lazy memory mapped access to an underlying buffer. This means values are decoded/encoded each time they are read or written to.
## Examples
### Defining Fields
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int16 member :u, :uint32 end
### Initializing Fields
union = MyUnion.new union.i = -1 union = MyUnion.new(i: -1)
### Inheriting Unions
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int16 member :u, :uint32 end class MyUnion2 < MyUnion member :f, :float32 member :d, :float64 end union = MyUnion.new union.i = -1 union2 = MyUnion.new union2.i = -1 union2.d = 1.123
### Packing Unions
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int16 member :u, :uint32 end union = MyUnion.new union.u = 0x11111111 union.i = -1 union.pack # => "\xFF\xFF\x11\x11"
### Unpacking Unions
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int32 member :u, :uint32 end union = MyUnion.unpack("\xFF\xFF\x11\x11") union.c # => "\xFF" union.i # => -1 union.u # => 286392319
### Array
Fields
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int16 member :u, :uint32 member :nums, [:uint8, 10] end union = MyUnion.new union.nums = [0x01, 0x02, 0x03, 0x04] union.pack # => "\x01\x02\x03\x04\x00\x00\x00\x00\x00\x00"
### Unbounded Array
Fields
class MyUnion < Ronin::Support::Binary::Union member :c, :char member :i, :int16 member :u, :uint32 member :payload, (:uint8..) end union = MyUnion.new union.payload = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08] union.pack # => "\x01\x02\x03\x04\x05\x06\a\b"
### Default Endianness
class MyUnion < Ronin::Support::Binary::Union endian :big member :c, :char member :i, :int32 member :u, :uint32 end union = MyUnion.new(u: 0xaabbccdd) union.pack # => "\xAA\xBB\xCC\xDD"
@api public