/* 
 * @(#)$Id: StringUtils.java 3619 2008-03-26 07:23:03Z yui $ 
 * 
 * Copyright 2006-2008 Makoto YUI 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 *  
 * Contributors: 
 *     Makoto YUI - initial implementation 
 */ 
//package xbird.util.string; 
 
 
/** 
 *  
 * <DIV lang="en"></DIV> 
 * <DIV lang="ja"></DIV> 
 *  
 * @author Makoto YUI ([email protected]) 
 */ 
public final class StringUtils { 
 
 
    private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray(); 
    private static final int UPPER_NIBBLE_MASK = 0xF0; 
    private static final int LOWER_NIBBLE_MASK = 0x0F; 
 
    public static void encodeHex(final byte b, final StringBuilder buf) { 
        final int upper = (b & UPPER_NIBBLE_MASK) >> 4; 
        final int lower = b & LOWER_NIBBLE_MASK; 
        buf.append(HEX_DIGITS[upper]); 
        buf.append(HEX_DIGITS[lower]); 
    } 
 
    public static String encodeHex(final byte[] buf) { 
        final int buflen = buf.length; 
        final char[] ch = new char[buflen * 2]; 
        for(int i = 0, j = 0; i < buf.length; i++, j += 2) { 
            final byte b = buf[i]; 
            final int upper = (b & UPPER_NIBBLE_MASK) >> 4; 
            final int lower = b & LOWER_NIBBLE_MASK; 
            ch[j] = HEX_DIGITS[upper]; 
            ch[j + 1] = HEX_DIGITS[lower]; 
        } 
        return new String(ch); 
    } 
 
    public static byte[] decodeHex(final char[] data) { 
        final int len = data.length; 
        if((len & 0x01) != 0) { 
            throw new IllegalArgumentException("Illegal HexaDecimal character"); 
        } 
        final byte[] out = new byte[len >> 1]; 
        for(int i = 0, j = 0; j < len; i++) { 
            int f = hexToDigit(data[j], j) << 4; 
            j++; 
            f = f | hexToDigit(data[j], j); 
            j++; 
            out[i] = (byte) (f & 0xFF); 
        } 
        return out; 
    } 
 
    private static int hexToDigit(final char ch, final int index) { 
        final int digit = Character.digit(ch, 16); 
        if(digit == -1) { 
            throw new IllegalArgumentException("Illegal HexaDecimal character '" + ch 
                    + "' at index " + index); 
        } 
        return digit; 
    } 
 
} 
 
    
     
     
     
     
     
   |     
 
 |