BigInteger.toString method is deleting leading 0
biginteger, java, tostring
Solution
I would personally avoid using `BigInteger` to convert binary data to text. That's not really what it's there for, even if it can be used for that. There's loads of code available to convert a `byte[]` to its hex representation - e.g. using Apache Commons Codec or a simple single method:
private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
public static String toHex(byte[] data) {
char[] chars = new char[data.length * 2];
for (int i = 0; i < data.length; i++) {
chars[i * 2] = HEX_DIGITS[(data[i] >> 4) & 0xf];
chars[i * 2 + 1] = HEX_DIGITS[data[i] & 0xf];
}
return new String(chars);
}
Problem
I am trying to generate MD5 sum using MessageDigest. And i am having following code. ``` byte[] md5sum = digest.digest(); BigInteger bigInt = new BigInteger(1, md5sum); output = bigInt.toString(16); ``` This returns not 32 character string but a 31 character string `8611c0b0832bce5a19ceee626a403a7` Expected String is `08611c0b0832bce5a19ceee626a403a7` Leading 0 is missing in the output. I tried the other method ``` byte[] md5sum = digest.digest(); output = new String(Hex.encodeHex(md5sum)); ``` And the output is as expected. I checked the doc and Integer.toString does the conversion according to it The digit-to-character mapping provided by Character.forDigit is used, and a minus sign is prepended if appropriate. and in Character.forDigit methos The digit argument is valid if 0 <=digit < radix. Can some one tell me how two methods are different and why leading 0 is deleted?