def PackableStruct(values={})
packcode = values.map{|k, v| to_packcode v}.join("")
oscls = Struct.new(*values.map{|k, v| k}.push(:packcode)) do
def pack
(self.to_a - [self.packcode]).pack packcode
end
end
os = oscls.new
os.packcode = packcode
return os
end