Go 戈朗数基转换

Go 戈朗数基转换,go,base-conversion,Go,Base Conversion,我想知道,如果不在Golang中使用strconv,如何将base10数字从一个基数转换为另一个基数 你能给我一些建议吗?这可能是作弊,但我想你可以看看的实现,并以它为例构建一些自己的代码。这样,您就不用直接使用它,而是自己实现了它。使用包和日志: log_77(x)=log(x)/log(77)您可以使用此函数将任意十进制数转换为任意基数,并使用您选择的字符集 func encode(nb uint64, buf *bytes.Buffer, base string) { l := uin

我想知道,如果不在Golang中使用strconv,如何将base10数字从一个基数转换为另一个基数


你能给我一些建议吗?

这可能是作弊,但我想你可以看看的实现,并以它为例构建一些自己的代码。这样,您就不用直接使用它,而是自己实现了它。

使用包和日志:


log_77(x)=log(x)/log(77)

您可以使用此函数将任意十进制数转换为任意基数,并使用您选择的字符集

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
}

那么你不想使用的背景是什么呢?
strconv
?当然你可以这样做:,但我不知道这是你想要的。我一开始使用的是
strconv
,但在研究了这个任务之后,我发现要求不是使用这个包,我不想最后得到一堆if-else,比如基数只与字符串表示相关,那么为什么不使用strconv呢?否则,您将自己实现strconv的功能。(顺便说一句,你读过if itoa.go的源代码了吗?if else链在3个块处不是很长,只是用于优化。)
// encoding
var buf bytes.Buffer
encode(100, &buf, "0123456789abcdef")
fmt.Println(buf.String())
// 64

// decoding
val := decode("64", "0123456789abcdef")
fmt.Println(val)
// 100
package main

import (
    "fmt"
    "math/big"
)

func main() {
    fmt.Println(big.NewInt(1000000000000).Text(62))
}