Go - 将表示二进制数的字符串转换为int

Tia*_*hen 12 go

我写了一个愚蠢的解决方案,任何更好的食谱?正如你可以看到很多无用的转换.

package main

import (
    "fmt"
    "strconv"
    "math"
)

func conv(str string) int {
    l := len(str)
    result := 0.0
    for i,n := range str {
        number,_ := strconv.Atof64(string(n))
        result += math.Exp2(float64(l-i-1))*number
    }
    return int(result)
}

func main() {
    fmt.Println(conv("1001"))
}
Run Code Online (Sandbox Code Playgroud)

Lil*_*ard 22

如果您正在使用当前的Go版本(release.r60.3),那么您需要strconv.ParseInt从任意基础转换的函数.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    if i, err := strconv.ParseInt("1001", 2, 64); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Go 1,则需要strconv.ParseInt将从任意基数转换为给定位大小的函数.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    if i, err := strconv.ParseInt("1001", 2, 64); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(i)
    }
}
Run Code Online (Sandbox Code Playgroud)


pet*_*rSO 8

例如,在Go 1上,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("1101", 2, 64)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(i)
}
Run Code Online (Sandbox Code Playgroud)

输出:

13
Run Code Online (Sandbox Code Playgroud)

  • 哇,他们肯定改变了Go 1的`strconv`包. (2认同)