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

时间:2012-02-14 03:53:21

标签: 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"))
}

2 个答案:

答案 0 :(得分:21)

如果你正在使用当前的Go版本(release.r60.3),你需要strconv.Btoi64()函数,该函数从任意基数转换。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    if i, err := strconv.Btoi64("1001", 2); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(i)
    }
}

如果您使用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)
    }
}

答案 1 :(得分: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)
}

输出:

13