我想知道,在Golang中如何在不使用strconv
的情况下将base10号码从一个基数转换为另一个?
答案 0 :(得分:2)
答案 1 :(得分:2)
package main
import (
"fmt"
"math/big"
)
func main() {
fmt.Println(big.NewInt(1000000000000).Text(62))
}
答案 2 :(得分:1)
这可能是作弊但我想你可以看一下strconv.FormatInt的实现,并以此为例构建一些自己的代码。这样你就不能直接使用它,你自己实现了它。
答案 3 :(得分:0)
您可以使用此功能将任何十进制数转换为具有您选择的字符集的任何基数。
func encode(nb uint64, buf *bytes.Buffer, base string) {
l := uint64(len(base))
if nb/l != 0 {
encode(nb/l, buf, base)
}
buf.WriteByte(base[nb%l])
}
func decode(enc, base string) uint64 {
var nb uint64
lbase := len(base)
le := len(enc)
for i := 0; i < le; i++ {
mult := 1
for j := 0; j < le-i-1; j++ {
mult *= lbase
}
nb += uint64(strings.IndexByte(base, enc[i]) * mult)
}
return nb
}
你可以这样使用它:
// encoding
var buf bytes.Buffer
encode(100, &buf, "0123456789abcdef")
fmt.Println(buf.String())
// 64
// decoding
val := decode("64", "0123456789abcdef")
fmt.Println(val)
// 100