Editor's Note:This text has changed from the original version.
Have you ever needed to
convert a byte array (byte []) into a displayable hex string? The JDK does not
provide this capability for byte arrays, only for the wrapper classes.
Below is the code which will convert a byte array into a displayable "hex" representation of the string.
Now you can turn
byte b[] = {0xf1, 0x0d,
0x3c, 0x44};
into:
String s =
"F10D3C44"
like this:
String s =
byteArrayToHexString(b);
- provides the same functionality found in
Integer.toHexString(), Short.toHexString(), etc...
- Simple to use
- Fast, efficient and accurate
- Tested and proven
Here's the code:
/**
* Convert a byte[] array to readable string format. This makes the "hex"
readable!
* @return result String buffer in String format
* @param in byte[] buffer to convert to string format
*/
static String byteArrayToHexString(byte in[]) {
byte ch = 0x00;
int i = 0;
if (in == null || in.length <= 0)
return null;
String pseudo[] = {"0", "1", "2",
"3", "4", "5", "6", "7", "8",
"9", "A", "B", "C", "D", "E",
"F"};
StringBuffer out = new StringBuffer(in.length * 2);
while (i < in.length) {
ch = (byte) (in[i] & 0xF0); // Strip off
high nibble
ch = (byte) (ch >>> 4);
// shift the bits down
ch = (byte) (ch & 0x0F);
// must do this is high order bit is on!
out.append(pseudo[ (int) ch]); // convert the
nibble to a String Character
ch = (byte) (in[i] & 0x0F); // Strip off
low nibble
out.append(pseudo[ (int) ch]); // convert the
nibble to a String Character
i++;
}
String rslt = new String(out);
return rslt;
}
Stay tuned, I'll present some additional
routines which take the "hex" data and format it into a "Hex Dump"
format like:
0000: 32 00 00 00 00 49 99 04 13 14 56 20 17 55
2B 3F ____[2 IV U+?]
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ____[
]
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ____[
]
The above example was created using
byteArrayToHexString() along with another routine....I also have a hex dump routine which
dumps the hex data in "old" mainframe EBCDIC style format where each byte is
display one nibble on top of the other.
If you have a hot tip and we publish it, we'll pay you. However, due to accounting overhead we no longer pay $10 for a single tip submission. You must accumulate 10 acceptable tips to receive payment. Be sure to include a clear explanation of what the technique does and why it's useful. If it includes code, limit it to 20 lines if possible.
Submit your tip here.