package org.apache.tomcat.util.buf;
-import java.io.ByteArrayOutputStream;
-import org.apache.tomcat.util.res.StringManager;
-
/**
- * Library of utility methods useful in dealing with converting byte arrays
- * to and from strings of hexadecimal digits.
+ * Tables useful when converting byte arrays to and from strings of hexadecimal
+ * digits.
* Code from Ajp11, from Apache's JServ.
*
* @author Craig R. McClanahan
(byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f' };
- /**
- * The string manager for this package.
- */
- private static StringManager sm =
- StringManager.getManager("org.apache.tomcat.util.buf.res");
-
-
// --------------------------------------------------------- Static Methods
/**
- * Convert a String of hexadecimal digits into the corresponding
- * byte array by encoding each two hexadecimal digits as a byte.
- *
- * @param digits Hexadecimal digits representation
- *
- * @exception IllegalArgumentException if an invalid hexadecimal digit
- * is found, or the input string contains an odd number of hexadecimal
- * digits
- */
- public static byte[] convert(String digits) {
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- for (int i = 0; i < digits.length(); i += 2) {
- char c1 = digits.charAt(i);
- if ((i+1) >= digits.length())
- throw new IllegalArgumentException
- (sm.getString("hexUtil.odd"));
- char c2 = digits.charAt(i + 1);
- byte b = 0;
- if ((c1 >= '0') && (c1 <= '9'))
- b += ((c1 - '0') * 16);
- else if ((c1 >= 'a') && (c1 <= 'f'))
- b += ((c1 - 'a' + 10) * 16);
- else if ((c1 >= 'A') && (c1 <= 'F'))
- b += ((c1 - 'A' + 10) * 16);
- else
- throw new IllegalArgumentException
- (sm.getString("hexUtil.bad"));
- if ((c2 >= '0') && (c2 <= '9'))
- b += (c2 - '0');
- else if ((c2 >= 'a') && (c2 <= 'f'))
- b += (c2 - 'a' + 10);
- else if ((c2 >= 'A') && (c2 <= 'F'))
- b += (c2 - 'A' + 10);
- else
- throw new IllegalArgumentException
- (sm.getString("hexUtil.bad"));
- baos.write(b);
- }
- return (baos.toByteArray());
-
- }
-
-
- /**
- * Convert a byte array into a printable format containing a
- * String of hexadecimal digit characters (two per byte).
- *
- * @param bytes Byte array representation
- */
- public static String convert(byte bytes[]) {
-
- StringBuffer sb = new StringBuffer(bytes.length * 2);
- for (int i = 0; i < bytes.length; i++) {
- sb.append(convertDigit((bytes[i] >> 4)));
- sb.append(convertDigit((bytes[i] & 0x0f)));
- }
- return (sb.toString());
-
- }
-
- /**
- * Convert 4 hex digits to an int, and return the number of converted
- * bytes.
- *
- * @param hex Byte array containing exactly four hexadecimal digits
- *
- * @exception IllegalArgumentException if an invalid hexadecimal digit
- * is included
- */
- public static int convert2Int( byte[] hex ) {
- // Code from Ajp11, from Apache's JServ
-
- // assert b.length==4
- // assert valid data
- int len;
- if(hex.length < 4 ) return 0;
- if( DEC[hex[0]]<0 )
- throw new IllegalArgumentException(sm.getString("hexUtil.bad"));
- len = DEC[hex[0]];
- len = len << 4;
- if( DEC[hex[1]]<0 )
- throw new IllegalArgumentException(sm.getString("hexUtil.bad"));
- len += DEC[hex[1]];
- len = len << 4;
- if( DEC[hex[2]]<0 )
- throw new IllegalArgumentException(sm.getString("hexUtil.bad"));
- len += DEC[hex[2]];
- len = len << 4;
- if( DEC[hex[3]]<0 )
- throw new IllegalArgumentException(sm.getString("hexUtil.bad"));
- len += DEC[hex[3]];
- return len;
- }
-
-
-
- /**
* Provide a mechanism for ensuring this class is loaded.
*/
public static void load() {
// Nothing to do
}
- /**
- * [Private] Convert the specified value (0 .. 15) to the corresponding
- * hexadecimal digit.
- *
- * @param value Value to be converted
- */
- private static char convertDigit(int value) {
-
- value &= 0x0f;
- if (value >= 10)
- return ((char) (value - 10 + 'a'));
- else
- return ((char) (value + '0'));
-
- }
-
-
}
\ No newline at end of file