    001/*
    002 * $HeadURL: http://juliusdavies.ca/svn/not-yet-commons-ssl/tags/commons-ssl-0.3.15/src/java/org/apache/commons/ssl/util/Hex.java $
    003 * $Revision: 121 $
    004 * $Date: 2007-11-13 21:26:57 -0800 (Tue, 13 Nov 2007) $
    005 *
    006 * ====================================================================
    007 * Licensed to the Apache Software Foundation (ASF) under one
    008 * or more contributor license agreements.  See the NOTICE file
    009 * distributed with this work for additional information
    010 * regarding copyright ownership.  The ASF licenses this file
    011 * to you under the Apache License, Version 2.0 (the
    012 * "License"); you may not use this file except in compliance
    013 * with the License.  You may obtain a copy of the License at
    014 *
    015 *   http://www.apache.org/licenses/LICENSE-2.0
    016 *
    017 * Unless required by applicable law or agreed to in writing,
    018 * software distributed under the License is distributed on an
    019 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    020 * KIND, either express or implied.  See the License for the
    021 * specific language governing permissions and limitations
    022 * under the License.
    023 * ====================================================================
    024 *
    025 * This software consists of voluntary contributions made by many
    026 * individuals on behalf of the Apache Software Foundation.  For more
    027 * information on the Apache Software Foundation, please see
    028 * <http://www.apache.org/>.
    029 *
    030 */
    031
    032package org.apache.commons.ssl.util;
    033
    034/**
    035 * Utility class for dealing with hex-encoding of binary data.
    036 *
    037 * @author <a href="mailto:juliusdavies@cucbc.com">juliusdavies@gmail.com</a>
    038 * @since 13-Nov-2007
    039 */
    040public class Hex {
    041
    042    public static byte[] decode(String s) {
    043        byte[] b = new byte[s.length() / 2];
    044        for (int i = 0; i < b.length; i++) {
    045            String hex = s.substring(2 * i, 2 * (i + 1));
    046            b[i] = (byte) Integer.parseInt(hex, 16);
    047        }
    048        return b;
    049    }
    050
    051    public static byte[] decode(byte[] hexString) {
    052        byte[] b = new byte[hexString.length / 2];
    053        char[] chars = new char[2];
    054        for (int i = 0; i < b.length; i++) {
    055            chars[0] = (char) hexString[2 * i];
    056            chars[1] = (char) hexString[2 * i + 1];
    057            String hex = new String(chars);
    058            b[i] = (byte) Integer.parseInt(hex, 16);
    059        }
    060        return b;
    061    }
    062
    063    public static String encode(byte[] b) {
    064        return encode(b, 0, b.length);
    065    }
    066
    067    public static String encode(byte[] b, int offset, int length) {
    068        StringBuffer buf = new StringBuffer();
    069        int len = Math.min(offset + length, b.length);
    070        for (int i = offset; i < len; i++) {
    071            int c = (int) b[i];
    072            if (c < 0) {
    073                c = c + 256;
    074            }
    075            if (c >= 0 && c <= 15) {
    076                buf.append('0');
    077            }
    078            buf.append(Integer.toHexString(c));
    079        }
    080        return buf.toString();
    081    }
    082
    083}