1 57 58 package com.sun.org.apache.xerces.internal.impl.dv.util; 59 60 67 public final class HexBin { 68 static private final int BASELENGTH = 255; 69 static private final int LOOKUPLENGTH = 16; 70 static final private byte [] hexNumberTable = new byte[BASELENGTH]; 71 static final private char [] lookUpHexAlphabet = new char[LOOKUPLENGTH]; 72 73 74 static { 75 for (int i = 0; i<BASELENGTH; i++ ) { 76 hexNumberTable[i] = -1; 77 } 78 for ( int i = '9'; i >= '0'; i--) { 79 hexNumberTable[i] = (byte) (i-'0'); 80 } 81 for ( int i = 'F'; i>= 'A'; i--) { 82 hexNumberTable[i] = (byte) ( i-'A' + 10 ); 83 } 84 for ( int i = 'f'; i>= 'a'; i--) { 85 hexNumberTable[i] = (byte) ( i-'a' + 10 ); 86 } 87 88 for(int i = 0; i<10; i++ ) 89 lookUpHexAlphabet[i] = (char)('0'+i); 90 for(int i = 10; i<=15; i++ ) 91 lookUpHexAlphabet[i] = (char)('A'+i -10); 92 } 93 94 100 static public String encode(byte[] binaryData) { 101 if (binaryData == null) 102 return null; 103 int lengthData = binaryData.length; 104 int lengthEncode = lengthData * 2; 105 char[] encodedData = new char[lengthEncode]; 106 int temp; 107 for (int i = 0; i < lengthData; i++) { 108 temp = binaryData[i]; 109 if (temp < 0) 110 temp += 256; 111 encodedData[i*2] = lookUpHexAlphabet[temp >> 4]; 112 encodedData[i*2+1] = lookUpHexAlphabet[temp & 0xf]; 113 } 114 return new String (encodedData); 115 } 116 117 123 static public byte[] decode(String encoded) { 124 if (encoded == null) 125 return null; 126 int lengthData = encoded.length(); 127 if (lengthData % 2 != 0) 128 return null; 129 130 char[] binaryData = encoded.toCharArray(); 131 int lengthDecode = lengthData / 2; 132 byte[] decodedData = new byte[lengthDecode]; 133 byte temp1, temp2; 134 for( int i = 0; i<lengthDecode; i++ ){ 135 temp1 = hexNumberTable[binaryData[i*2]]; 136 if (temp1 == -1) 137 return null; 138 temp2 = hexNumberTable[binaryData[i*2+1]]; 139 if (temp2 == -1) 140 return null; 141 decodedData[i] = (byte)((temp1 << 4) | temp2); 142 } 143 return decodedData; 144 } 145 } 146 | Popular Tags |