def fast_unpack(string)
      out = string.unpack(to_s)
      parts = {}

      directives.each_with_index do |directive, i|
        parts[directive.name] = out[i]
      end

      parts.delete(:null) {}
      parts
    end
def fast_unpack(string)
      out = string.unpack(to_s)
      parts = {}

      directives.each_with_index do |directive, i|
        parts[directive.name] = out[i]
      end

      parts.delete(:null) {}
      parts
    end
This unpacks the entire string at once.  It assumes that none of
 the directives will need the values of other directives.  If
 you're not sure what this means, don't use it.

 @param string [String] the packed string.
 @return [Hash<Symbol, Object>] the unpacked data.