Base58Check encoding: Difference between revisions
Content added Content deleted
(Added Go) |
|||
Line 152: | Line 152: | ||
0xecac89cad93923c02321 -> EJDM8drfXA6uyA |
0xecac89cad93923c02321 -> EJDM8drfXA6uyA |
||
0x10c8511e -> Rt5zm</pre> |
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}}== |
=={{header|Haskell}}== |