Step 8 of this wiki page gives this hex value: 00010966776006953D5567439E5E39F86A0D273BEED61967F6
Step 9 converts it to this base58 string:16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
I'm trying to implement the conversion function using the pseudocode from this wiki page. This is my implementation (in Java):
String input = "00010966776006953D5567439E5E39F86A0D273BEED61967F6" BigInteger bigInteger = new BigInteger(input , 16); String code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; StringBuilder output = new StringBuilder(); while(bigInteger.compareTo(BigInteger.ZERO) == 1){ BigInteger[] divAndRemainder = bigInteger.divideAndRemainder(BigInteger.valueOf(58)); output.append(code_string.charAt(divAndRemainder[1].intValue())); bigInteger = divAndRemainder[0]; } int i=0; while(concat.charAt(i) == '0'){ i++; output.append(code_string.charAt(0)); } System.out.println(output.reverse());
This prints out 1116UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
. This is close to what the wiki page produces, but not quite, there are 2 extra leading 1
s. This is from the 2 leading 0
s in the input string. Why doesn't the wiki example get my result?