Java/Data Type/String Hex

Материал из Java эксперт
Версия от 18:01, 31 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Converts bytes to a hex string

 
/*   Copyright 2004 The Apache Software Foundation
 *
 *   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.
 */
//xmlbeans
import java.io.UnsupportedEncodingException;
/**
 * format validation
 *
 * This class encodes/decodes hexadecimal data
 * @author Jeffrey Rodriguez
 * @version $Id: HexBin.java 125124 2005-01-14 00:23:54Z kkrouse $
 */
public class Main {
  static private final int  BASELENGTH   = 255;
  static private final int  LOOKUPLENGTH = 16;
  static private byte [] hexNumberTable    = new byte[BASELENGTH];
  static private byte [] lookUpHexAlphabet = new byte[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] = (byte) ("0"+i );
      for(int i = 10; i<=15; i++ )
          lookUpHexAlphabet[i] = (byte) ("A"+i -10);
  }
  /**
   * Converts bytes to a hex string
   */
  static public String bytesToString(byte[] binaryData)
  {
      if (binaryData == null)
          return null;
      return new String(encode(binaryData));
  }
  /**
   * array of byte to encode
   *
   * @param binaryData
   * @return return encode binary array
   */
  static public byte[] encode(byte[] binaryData) {
      if (binaryData == null)
          return null;
      int lengthData   = binaryData.length;
      int lengthEncode = lengthData * 2;
      byte[] encodedData = new byte[lengthEncode];
      for( int i = 0; i<lengthData; i++ ){
          encodedData[i*2] = lookUpHexAlphabet[(binaryData[i] >> 4) & 0xf];
          encodedData[i*2+1] = lookUpHexAlphabet[ binaryData[i] & 0xf];
      }
      return encodedData;
  }
}





Encode a byte array to hex string

 
/*
 * 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);
        }
    }
    /**
     * Encode a byte array to hex string
     *
     * @param binaryData array of byte to encode
     * @return return encoded string
     */
    static public String encode(byte[] binaryData) {
        if (binaryData == null)
            return null;
        int lengthData   = binaryData.length;
        int lengthEncode = lengthData * 2;
        char[] encodedData = new char[lengthEncode];
        int temp;
        for (int i = 0; i < lengthData; i++) {
            temp = binaryData[i];
            if (temp < 0)
                temp += 256;
            encodedData[i*2] = lookUpHexAlphabet[temp >> 4];
            encodedData[i*2+1] = lookUpHexAlphabet[temp & 0xf];
        }
        return new String(encodedData);
    }
}





Gets a hex string from 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. 
 *  
 */

/**
 * Various string manipulation methods that are more efficient then chaining
 * string operations: all is done in the same buffer without creating a bunch of
 * string objects.
 * 
 * @author 
 */
public class Main {
  /**
   * Gets a hex string from byte array.
   * 
   * @param res
   *            the byte array
   * @return the hex string representing the binary values in the array
   */
  public static final String toHexString( byte[] res )
  {
      StringBuffer buf = new StringBuffer( res.length << 1 );
      
      for ( int ii = 0; ii < res.length; ii++ )
      {
          String digit = Integer.toHexString( 0xFF & res[ii] );
          
          if ( digit.length() == 1 )
          {
              digit = "0" + digit;
          }
          
          buf.append( digit );
      }
      return buf.toString().toUpperCase();
  }

}