Java/Data Type/String Hex

Материал из Java эксперт
Перейти к: навигация, поиск

Converts bytes to a hex string

   <source lang="java">

/* 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;
 }

}

 </source>
   
  
 
  



Encode a byte array to hex string

   <source lang="java">

/*

* 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);
   }

}

 </source>
   
  
 
  



Gets a hex string from byte array.

   <source lang="java">

/*

*  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();
 }

}

 </source>