@Override
	public String format(byte[] bytes) {
		char[] result = new char[_length];

		int i = 0;
		int offset = 0;
		if (_prefix != '\0')
			result[offset++] = _prefix;
		for (; i < 4; i++) {
			int value = bytes[i];
			result[offset++] = hexToChar(value >> 4, _alpha);
			result[offset++] = hexToChar(value, _alpha);
		}
		result[offset++] = '-';
		for (; i < 6; i++) {
			int value = bytes[i];
			result[offset++] = hexToChar(value >> 4, _alpha);
			result[offset++] = hexToChar(value, _alpha);
		}
		result[offset++] = '-';
		for (; i < 8; i++) {
			int value = bytes[i];
			result[offset++] = hexToChar(value >> 4, _alpha);
			result[offset++] = hexToChar(value, _alpha);
		}
		result[offset++] = '-';
		for (; i < 10; i++) {
			int value = bytes[i];
			result[offset++] = hexToChar(value >> 4, _alpha);
			result[offset++] = hexToChar(value, _alpha);
		}
		result[offset++] = '-';
		for (; i < 16; i++) {
			int value = bytes[i];
			result[offset++] = hexToChar(value >> 4, _alpha);
			result[offset++] = hexToChar(value, _alpha);
		}
		if (_suffix != '\0')
			result[offset++] = _suffix;

		return new String(result, 0, _length);
	}