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 1s. This is from the 2 leading 0s in the input string. Why doesn't the wiki example get my result?