Mega Code Archive

 
Categories / Java Tutorial / File
 

Decode hex string to a byte array

/*  * Licensed to the Apache Software Foundation (ASF) under one or more  * contributor license agreements.  See the NOTICE file distributed with  * this work for additional information regarding copyright ownership.  * The ASF licenses this file to You 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.  */ /**  * format validation  *  * This class encodes/decodes hexadecimal data  *   * @xerces.internal    *   * @author Jeffrey Rodriguez  * @version $Id: HexBin.java 446747 2006-09-15 21:46:20Z mrglavas $  */ public final class  HexBin {     static private final int  BASELENGTH   = 128;     static private final int  LOOKUPLENGTH = 16;     static final private byte [] hexNumberTable    = new byte[BASELENGTH];     static final private char [] lookUpHexAlphabet = new char[LOOKUPLENGTH];     static {         for (int i = 0; i < BASELENGTH; i++ ) {             hexNumberTable[i] = -1;         }         for ( int i = '9'; i >= '0'; i--) {             hexNumberTable[i] = (byte) (i-'0');         }         for ( int i = 'F'; i>= 'A'; i--) {             hexNumberTable[i] = (byte) ( i-'A' + 10 );         }         for ( int i = 'f'; i>= 'a'; i--) {            hexNumberTable[i] = (byte) ( i-'a' + 10 );         }         for(int i = 0; i<10; i++ ) {             lookUpHexAlphabet[i] = (char)('0'+i);         }         for(int i = 10; i<=15; i++ ) {             lookUpHexAlphabet[i] = (char)('A'+i -10);         }     }     /**      * Decode hex string to a byte array      *      * @param encoded encoded string      * @return return array of byte to encode      */     static public byte[] decode(String encoded) {         if (encoded == null)             return null;         int lengthData = encoded.length();         if (lengthData % 2 != 0)             return null;         char[] binaryData = encoded.toCharArray();         int lengthDecode = lengthData / 2;         byte[] decodedData = new byte[lengthDecode];         byte temp1, temp2;         char tempChar;         for( int i = 0; i<lengthDecode; i++ ){             tempChar = binaryData[i*2];             temp1 = (tempChar < BASELENGTH) ? hexNumberTable[tempChar] : -1;             if (temp1 == -1)                 return null;             tempChar = binaryData[i*2+1];             temp2 = (tempChar < BASELENGTH) ? hexNumberTable[tempChar] : -1;             if (temp2 == -1)                 return null;             decodedData[i] = (byte)((temp1 << 4) | temp2);         }         return decodedData;     } }