@Override
 public String format(final int[] array)
     throws NullPointerException, IllegalArgumentException {
   final int length = array.length + 1;
   final char[] result = new char[length];
   for (int i = 0; i < length; ) {
     final int value = array[i >> 1];
     result[i++] = FEMBinary.toChar((value >> 4) & 0xF);
     result[i++] = FEMBinary.toChar((value >> 0) & 0xF);
   }
   return new String(result);
 }
 @Override
 public int[] parse(final String string)
     throws NullPointerException, IllegalArgumentException {
   final char[] source = string.toCharArray();
   final int length = source.length;
   if ((length & 1) != 0) throw new IllegalArgumentException();
   final int[] result = new int[length >> 1];
   for (int i = 0; i < length; ) {
     final int x = i >> 1;
     final int hi = FEMBinary.toDigit(source[i++]);
     final int lo = FEMBinary.toDigit(source[i++]);
     result[x] = (byte) ((hi << 4) | (lo << 0));
   }
   return result;
 }