1 23 24 29 30 package com.sun.jdo.spi.persistence.support.sqlstore.utility; 31 32 33 public class HexConverter 34 { 35 private static final int AFTER_POS = 13; private static final int HEX_START = AFTER_POS + 2; 41 private static final int WORDS_PER_LINE = 4; 42 private static final int CHARS_PER_WORD = 10; 43 private static final int CHAR_START = 56; 45 48 public static String simpleFormatHexBytes (byte rawBytes[], int length) 49 { 50 int i; 51 String result = new String (); 52 long data; 53 54 for (i = 0; i < length; i++) 55 { 56 data = (int)rawBytes[i] & 0xff; 57 58 if (i > 0) 59 result = result.concat(" "); 61 if (Long.toHexString(data).length() == 1) 62 result = result.concat("0"); result = result.concat(Long.toHexString(data)); 64 } 65 66 result = result.concat("\n"); return result; 68 } 69 70 71 72 public static String formatHexBytes(byte rawBytes[], int length) 73 { 74 int i, j, bufPtr; 75 char []buf = new char[100]; 76 int word = 0; 77 long data; 78 int startPos = 0; 79 String dataAsHex; 80 String resultString = new String (); 81 82 for (j = 0; j < 100; j++) 84 buf[j] = ' '; 85 86 for (i = 0; i < length; i += 4) 87 { 88 bufPtr = (word * CHARS_PER_WORD) + HEX_START; 90 91 dataAsHex = new String (); 92 for (j = 0; j < 4; j++) 93 { 94 try 95 { 96 data = (int)rawBytes[i + j] & 0xff; 97 } 98 catch (ArrayIndexOutOfBoundsException e) 99 { 100 data = 0; 101 } 102 if (Long.toHexString(data).length() == 1) 103 dataAsHex = dataAsHex.concat("0"); dataAsHex = dataAsHex.concat(Long.toHexString(data)); 105 } 106 107 for (j = 0; j < 8; j++) 108 buf[bufPtr + j] = dataAsHex.charAt(j); 109 110 bufPtr = CHAR_START + (word * 4); 112 for (j = 0; j < 4; j++) 113 { 114 try 115 { 116 if (Character.isLetterOrDigit((char)rawBytes[i + j])) 117 buf[bufPtr + j] = (char)rawBytes[i + j]; 118 else 119 buf[bufPtr + j] = '.'; 120 } 121 catch (ArrayIndexOutOfBoundsException e) 122 { 123 buf[bufPtr + j] = '_'; 124 } 125 126 } 127 word++; 128 129 if (i != 0 && (word % WORDS_PER_LINE) == 0) 131 { 132 HexConverter.overlayOffsets(buf, startPos); 133 134 startPos = i + 4; 135 resultString = resultString.concat(new String (buf, 0, 136 CHAR_START + (word * 5))); 137 resultString = resultString.concat("\n"); 139 word = 0; 140 141 for (j = 0; j < 100; j++) 143 buf[j] = ' '; 144 } 145 } 146 147 if (word != 0) 149 { 150 HexConverter.overlayOffsets(buf, startPos); 151 152 resultString = resultString.concat(new 153 String (buf, 0, CHAR_START + (word * 5))); 154 } 155 156 resultString = resultString.concat("\n"); 158 return resultString; 159 } 160 161 private static void overlayOffsets(char buf[], int startPos) 162 { 163 String startStr; 164 String startStrHex; 165 int j; 166 167 startStr = StringScanner.getIntStr(startPos); 168 startStrHex = Integer.toHexString(startPos); 169 for (j = 0; j < 6; j++) 170 { 171 if (j + startStr.length() >= 6) 172 buf[j] = startStr.charAt(startStr.length() - (6 - j)); 173 else 174 buf[j] = ' '; 175 } 176 buf[6] = ' '; buf[7] = '0'; buf[8] = 'x'; 177 for (j = 0; j < 4; j++) 178 { 179 if (j + startStrHex.length() >= 4) 180 buf[j + 9] = startStrHex.charAt( 181 startStrHex.length() - (4 - j)); 182 else 183 buf[j + 9] = '0'; 184 } 185 } 186 } 187 | Popular Tags |