FileDocCategorySizeDatePackage
HexUtils.javaAPI DocApache Tomcat 6.0.146402Fri Jul 20 04:20:34 BST 2007org.apache.catalina.util

HexUtils

public final class HexUtils extends Object
Library of utility methods useful in dealing with converting byte arrays to and from strings of hexadecimal digits.
author
Craig R. McClanahan

Fields Summary
public static final int[]
DEC
private static StringManager
sm
The string manager for this package.
Constructors Summary
Methods Summary
public static byte[]convert(java.lang.String digits)
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



                                                        
         

        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());

    
public static java.lang.Stringconvert(byte[] bytes)
Convert a byte array into a printable format containing a String of hexadecimal digit characters (two per byte).

param
bytes Byte array representation


        StringBuffer sb = new StringBuffer(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            sb.append(convertDigit((int) (bytes[i] >> 4)));
            sb.append(convertDigit((int) (bytes[i] & 0x0f)));
        }
        return (sb.toString());

    
public static intconvert2Int(byte[] hex)
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

        // 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;
    
private static charconvertDigit(int value)
[Private] Convert the specified value (0 .. 15) to the corresponding hexadecimal digit.

param
value Value to be converted


        value &= 0x0f;
        if (value >= 10)
            return ((char) (value - 10 + 'a"));
        else
            return ((char) (value + '0"));