Mega Code Archive

 
Categories / Java / File Input Output
 

Convert hexadecimal digits into byte array by encoding each two hexadecimal digits as a byte

/*  * 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.  */ import java.io.ByteArrayOutputStream; /**  * Library of utility methods useful in dealing with converting byte arrays to  * and from strings of hexadecimal digits.  *   * @author Craig R. McClanahan  */ public class Utils {   /**    * 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("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("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("hexUtil.bad");       baos.write(b);     }     return (baos.toByteArray());   } }