/** Create a nice readable message for errors */
 private String makeExceptionMessage(IField<?> c, String operation) {
   Object fieldKey = "unknown";
   if (c != null) {
     try {
       fieldKey = new Integer(c.getFieldNumber());
     } catch (Exception ignore) {
     }
   }
   return getClass().getName() + ": Problem " + operation + " field " + fieldKey;
 }
 /** Convert the component into a byte[]. */
 public byte[] pack(IField<?> c) throws MessageException {
   try {
     byte[] data = (byte[]) c.getValue();
     int packedLength = prefixer.getPackedLength();
     if (packedLength == 0) {
       if (data.length != getLength()) {
         throw new MessageException(
             "Binary data length not the same as the packager length ("
                 + data.length
                 + "/"
                 + getLength()
                 + ")");
       }
     }
     byte[] ret = new byte[interpreter.getPackedLength(data.length) + packedLength];
     prefixer.encodeLength(data.length, ret);
     interpreter.interpret(data, ret, packedLength);
     return ret;
   } catch (Exception e) {
     throw new MessageException(makeExceptionMessage(c, "packing"), e);
   }
 }