1 package net.sf.mmapps.commons.util; 2 3 import java.util.StringTokenizer; 4 5 public class HexUtil { 6 7 /*** 8 * Converts a string of hex digits into a byte array of those digits 9 * @param hexString A String with ascii hex digits 10 * @return byte[] 11 */ 12 public static byte[] toByteArray(String hexString) { 13 byte[] number = new byte[hexString.length() / 2]; 14 int i; 15 for (i = 0; i < hexString.length(); i += 2) { 16 int j = Integer.parseInt(hexString.substring(i, i + 2), 16); 17 number[i / 2] = (byte) (j & 0x000000ff); 18 } 19 return number; 20 } 21 22 /*** 23 * Converts a string of hex digits into a byte array of those digits 24 * @param hexString A String with ascii hex digits 25 * @param separators A String containing the separator characters 26 * @return byte[] 27 */ 28 public static byte[] toByteArray(String hexString, String separators) { 29 byte[] buf = new byte[hexString.length() / 3]; 30 31 int i = 0; 32 StringTokenizer values = new StringTokenizer(hexString, separators); 33 while (values.hasMoreTokens()) { 34 String s = values.nextToken(); 35 int hex = Integer.parseInt(s, 16); 36 buf[i++] = (byte) (hex & 0x000000ff); 37 } 38 return buf; 39 } 40 41 /*** 42 * Convert int to Hex String 43 * @param i value to convert 44 * @return String 45 */ 46 public static String toHex(int i) { 47 byte b[] = new byte[4]; 48 b[0] = (byte) ((i & 0xff000000) >>> 24); 49 b[1] = (byte) ((i & 0x00ff0000) >>> 16); 50 b[2] = (byte) ((i & 0x0000ff00) >>> 8); 51 b[3] = (byte) ((i & 0x000000ff)); 52 53 return toHex(b[0]) + toHex(b[1]) + toHex(b[2]) + toHex(b[3]); 54 } 55 56 /*** 57 * Convert short to Hex String 58 * @param i value to convert 59 * @return String 60 */ 61 public static String toHex(short i) { 62 byte b[] = new byte[2]; 63 b[0] = (byte) ((i & 0xff00) >>> 8); 64 b[1] = (byte) ((i & 0x00ff)); 65 66 return toHex(b[0]) + toHex(b[1]); 67 } 68 69 /*** 70 * Convert byte to Hex String 71 * @param b value to convert 72 * @return String 73 */ 74 public static String toHex(byte b) { 75 Integer iI = new Integer((b << 24) >>> 24); 76 int i = iI.intValue(); 77 78 if (i < (byte) 16) { 79 return "0" + Integer.toString(i, 16); 80 } 81 else { 82 return Integer.toString(i, 16); 83 } 84 } 85 86 /*** 87 * Convert byte array to Hex String 88 * @param b value to convert 89 * @return String 90 */ 91 public static String toHex(byte[] b) { 92 return toHex(b, 0, b.length); 93 } 94 95 /*** 96 * Convert short array to Hex String 97 * @param b value to convert 98 * @return String 99 */ 100 public static String toHex(short[] b) { 101 return toHex(b, 0, b.length); 102 } 103 104 /*** 105 * Convert int array to Hex String 106 * @param b value to convert 107 * @return String 108 */ 109 public static String toHex(int[] b) { 110 return toHex(b, 0, b.length); 111 } 112 113 /*** 114 * Convert int array to Hex String 115 * @param b value to convert 116 * @param off offset 117 * @param len length 118 * @return String 119 */ 120 public static String toHex(int[] b, int off, int len) { 121 if (b == null) { 122 return ""; 123 } 124 StringBuffer s = new StringBuffer(""); 125 int i; 126 for (i = off; i < len; i++) { 127 s.append(toHex(b[i])); 128 } 129 return s.toString(); 130 } 131 132 /*** 133 * Convert short array to Hex String 134 * @param b value to convert 135 * @param off offset 136 * @param len length 137 * @return String 138 */ 139 public static String toHex(short[] b, int off, int len) { 140 if (b == null) { 141 return ""; 142 } 143 StringBuffer s = new StringBuffer(""); 144 int i; 145 for (i = off; i < len; i++) { 146 s.append(toHex(b[i])); 147 } 148 return s.toString(); 149 } 150 151 /*** 152 * Convert byte array to Hex String 153 * @param b value to convert 154 * @param off offset 155 * @param len length 156 * @return String 157 */ 158 public static String toHex(byte[] b, int off, int len) { 159 if (b == null) { 160 return ""; 161 } 162 StringBuffer s = new StringBuffer(""); 163 int i; 164 for (i = off; i < len; i++) { 165 s.append(toHex(b[i])); 166 } 167 return s.toString(); 168 } 169 170 /*** 171 * Convert int array to Hex format String 172 * @param b value to convert 173 * @return String 174 */ 175 public static String toHexFormat(int[] b) { 176 return toHexFormat(b, 0, b.length); 177 } 178 179 /*** 180 * Convert short array to Hex format String 181 * @param b value to convert 182 * @return String 183 */ 184 public static String toHexFormat(short[] b) { 185 return toHexFormat(b, 0, b.length); 186 } 187 188 /*** 189 * Convert byte array to Hex format String 190 * @param b value to convert 191 * @return String 192 */ 193 public static String toHexFormat(byte[] b) { 194 return toHexFormat(b, 0, b.length); 195 } 196 197 /*** 198 * Convert byte array to Hex format String 199 * @param b value to convert 200 * @param off offset 201 * @param len length 202 * @return String 203 */ 204 public static String toHexFormat(byte[] b, int off, int len) { 205 StringBuffer s = new StringBuffer(""); 206 StringBuffer c = new StringBuffer(""); 207 int i; 208 209 if (b == null) { 210 return "<null>"; 211 } 212 213 for (i = off; i < len; i++) { 214 if (i % 16 == 0) { 215 s.append(toHex(i) + " "); 216 } 217 218 s.append(" " + toHex(b[i])); 219 if (b[i] >= 0x20 && b[i] < 0x7f) { 220 c.append((char) b[i]); 221 } 222 else { 223 c.append('.'); 224 } 225 if (i % 16 == 15) { 226 s.append(c).append("\n"); 227 c.setLength(0); 228 } 229 230 } 231 232 if (i % 16 != 0) { 233 s.append(" \"").append(c).append("\"\n"); 234 } 235 236 return s.toString(); 237 } 238 239 /*** 240 * Convert short array to Hex format String 241 * @param b value to convert 242 * @param off offset 243 * @param len length 244 * @return String 245 */ 246 public static String toHexFormat(short[] b, int off, int len) { 247 StringBuffer s = new StringBuffer(""); 248 int i; 249 250 if (b == null) { 251 return "<null>"; 252 } 253 254 for (i = off; i < len; i++) { 255 s.append(" " + toHex(b[i])); 256 if (i % 16 == 7) { 257 s.append("\n"); 258 } 259 else { 260 if (i % 4 == 3) { 261 s.append(" "); 262 } 263 } 264 } 265 if (i % 8 != 0) { 266 s.append("\n"); 267 } 268 269 return s.toString(); 270 } 271 272 /*** 273 * Convert int array to Hex format String 274 * @param b value to convert 275 * @param off offset 276 * @param len length 277 * @return String 278 */ 279 public static String toHexFormat(int[] b, int off, int len) { 280 StringBuffer s = new StringBuffer(""); 281 int i; 282 283 if (b == null) { 284 return "<null>"; 285 } 286 287 for (i = off; i < len; i++) { 288 s.append(" " + toHex(b[i])); 289 if (i % 4 == 3) { 290 s.append("\n"); 291 } 292 } 293 if (i % 4 != 0) { 294 s.append("\n"); 295 } 296 297 return s.toString(); 298 } 299 300 }