examples/ip_address.rb
require 'bindata'
# A custom type representing an IP address.
# The underlying binary representation is a sequence of four octets.
# The human accessible representation is a dotted quad.
class IPAddr < BinData::Primitive
array :octets, type: :uint8, initial_length: 4
def set(val)
self.octets = val.split(/\./).map(&:to_i)
end
def get
self.octets.map(&:to_s).join(".")
end
end
ip = IPAddr.new("127.0.0.1")
puts "human readable value: #{ip}" #=> 127.0.0.1
puts "binary representation: #{ip.to_binary_s.inspect}" #=> "\177\000\000\001"