54 lines
749 B
Go
54 lines
749 B
Go
|
package base58
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"slices"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
byteabet = []byte("bMJZSrnxEyq8kN3UYQL5oXwV7BCFRtvpmDf1shAuHzKicTjeG29Pg4adW6")
|
||
|
base = len(byteabet)
|
||
|
)
|
||
|
|
||
|
func Encode(num int) string {
|
||
|
encoded := ""
|
||
|
|
||
|
worknum := num
|
||
|
|
||
|
for worknum > 0 {
|
||
|
remainder := worknum % base
|
||
|
|
||
|
worknum = worknum / base
|
||
|
|
||
|
encoded = string(byteabet[remainder]) + encoded
|
||
|
|
||
|
}
|
||
|
|
||
|
return encoded
|
||
|
}
|
||
|
|
||
|
func Decode(encoded string) int {
|
||
|
|
||
|
decoded := 0
|
||
|
|
||
|
workEncoded := encoded
|
||
|
|
||
|
for len(workEncoded) > 0 {
|
||
|
|
||
|
index := workEncoded[0:1]
|
||
|
|
||
|
power := len(workEncoded) - 1
|
||
|
|
||
|
idx := slices.IndexFunc(byteabet, func(c byte) bool {
|
||
|
return c == index[0]
|
||
|
})
|
||
|
|
||
|
decoded += idx * int(math.Pow(float64(base), float64(power)))
|
||
|
|
||
|
workEncoded = workEncoded[1:]
|
||
|
|
||
|
}
|
||
|
|
||
|
return decoded
|
||
|
}
|