Jump to content

Base58Check encoding: Difference between revisions

Added Go
(Added Go)
Line 152:
0xecac89cad93923c02321 -> EJDM8drfXA6uyA
0x10c8511e -> Rt5zm</pre>
 
=={{header|Go}}==
{{trans|Kotlin}}
<lang go>package main
 
import (
"fmt"
"math/big"
"strings"
)
 
const alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
 
var big0 = new(big.Int)
var big58 = new(big.Int).SetInt64(58)
 
func reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
 
func convertToBase58(hash string, base int) string {
var x, ok = new(big.Int).SetString(hash, base)
if !ok {
panic(fmt.Sprintf("'%v' is not a valid integer in base '%d'", hash, base))
}
var sb strings.Builder
var m = new(big.Int)
for x.Cmp(big0) == 1 {
x.DivMod(x, big58, m)
r := m.Int64()
sb.WriteByte(alphabet[r])
}
return reverse(sb.String())
}
 
func main() {
s := "25420294593250030202636073700053352635053786165627414518"
b := convertToBase58(s, 10)
fmt.Println(s, "->", b)
hashes := [...]string{
"0x61",
"0x626262",
"0x636363",
"0x73696d706c792061206c6f6e6720737472696e67",
"0x516b6fcd0f",
"0xbf4f89001e670274dd",
"0x572e4794",
"0xecac89cad93923c02321",
"0x10c8511e",
}
for _, hash := range hashes {
b58 := convertToBase58(hash, 0)
fmt.Printf("%-56s -> %s\n", hash, b58)
}
}</lang>
 
{{out}}
<pre>
25420294593250030202636073700053352635053786165627414518 -> 6UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
0x61 -> 2g
0x626262 -> a3gV
0x636363 -> aPEr
0x73696d706c792061206c6f6e6720737472696e67 -> 2cFupjhnEsSn59qHXstmK2ffpLv2
0x516b6fcd0f -> ABnLTmg
0xbf4f89001e670274dd -> 3SEo3LWLoPntC
0x572e4794 -> 3EFU7m
0xecac89cad93923c02321 -> EJDM8drfXA6uyA
0x10c8511e -> Rt5zm
</pre>
 
=={{header|Haskell}}==
9,490

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.