In Java, how do I convert a byte array to a string of hex digits while keeping leading zeros?
hex, java, md5
Solution
A simple approach would be to check how many digits are output by `Integer.toHexString()` and add a leading zero to each byte if needed. Something like this:
public static String toHexString(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
Problem
I'm working with some example java code for making md5 hashes. One part converts the results from bytes to a string of hex digits: ``` byte messageDigest[] = algorithm.digest(); StringBuffer hexString = new StringBuffer(); for (int i=0;i<messageDigest.length;i++) { hexString.append(Integer.toHexString(0xFF & messageDigest[i])); } ``` However, it doesn't quite work since toHexString apparently drops off leading zeros. So, what's the simplest way to go from byte array to hex string that maintains the leading zeros?