Golang数字基数转换

时间:2017-02-02 07:50:17

标签: go base-conversion

我想知道,在Golang中如何在不使用strconv的情况下将base10号码从一个基数转换为另一个?

你可以给我一些建议吗?

4 个答案:

答案 0 :(得分:2)

使用math包和日志identify

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

答案 1 :(得分:2)

package main

import (
    "fmt"
    "math/big"
)

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

Demo

答案 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