1 57 58 package org.enhydra.apache.xerces.utils; 59 60 61 62 69 70 public final class HexBin { 71 static private final int BASELENGTH = 255; 72 static private final int LOOKUPLENGTH = 16; 73 static private byte [] hexNumberTable = new byte[BASELENGTH]; 74 static private byte [] lookUpHexAlphabet = new byte[LOOKUPLENGTH]; 75 76 77 static { 78 for (int i = 0; i<BASELENGTH; i++ ) { 79 hexNumberTable[i] = -1; 80 } 81 for ( int i = '9'; i >= '0'; i--) { 82 hexNumberTable[i] = (byte) (i-'0'); 83 } 84 for ( int i = 'F'; i>= 'A'; i--) { 85 hexNumberTable[i] = (byte) ( i-'A' + 10 ); 86 } 87 for ( int i = 'f'; i>= 'a'; i--) { 88 hexNumberTable[i] = (byte) ( i-'a' + 10 ); 89 } 90 91 for(int i = 0; i<10; i++ ) 92 lookUpHexAlphabet[i] = (byte) ('0'+i ); 93 for(int i = 10; i<=15; i++ ) 94 lookUpHexAlphabet[i] = (byte) ('A'+i -10); 95 } 96 97 103 static boolean isHex( byte octect ) { 104 return( hexNumberTable[octect] != -1 ); 106 } 107 108 109 115 static boolean isArrayByteHex( byte[] arrayOctect ) { 116 if (arrayOctect == null) 117 return false; 118 int length = arrayOctect.length; 119 if (length % 2 != 0) 120 return false; 121 for( int i=0; i < length; i++ ){ 122 if( HexBin.isHex( arrayOctect[i] ) == false) 123 return false; 124 } 125 return true; 126 } 127 128 public static boolean isHex( String isValidString ){ 129 if (isValidString == null) 130 return false; 131 return( isArrayByteHex( isValidString.getBytes())); 132 } 133 134 140 static public byte[] encode( byte[] binaryData ) { 141 if (binaryData == null) 142 return null; 143 int lengthData = binaryData.length; 144 int lengthEncode = lengthData * 2; 145 byte[] encodedData = new byte[lengthEncode]; 146 for( int i = 0; i<lengthData; i++ ){ 147 encodedData[i*2] = lookUpHexAlphabet[ binaryData[i] >> 4]; 148 encodedData[i*2+1] = lookUpHexAlphabet[ binaryData[i] & 0xf]; 149 } 150 return encodedData; 151 } 152 153 static public byte[] decode ( byte[] binaryData ) { 154 if (binaryData == null) 155 return null; 156 int lengthData = binaryData.length; 157 if (lengthData % 2 != 0) 158 return null; 159 160 int lengthDecode = lengthData / 2; 161 byte[] decodedData = new byte[lengthDecode]; 162 for( int i = 0; i<lengthDecode; i++ ){ 163 decodedData[i] = (byte)((hexNumberTable[binaryData[i*2]] << 4) | hexNumberTable[binaryData[i*2+1]]); 164 } 165 return decodedData; 166 } 167 168 static public int getDecodedDataLength (byte[] hexData) { 169 if (!isArrayByteHex(hexData)) 170 return -1; 171 172 return hexData.length / 2; 173 } 174 } 175 | Popular Tags |