我为此写了一个愚蠢的解决方案,任何更好的食谱? 正如你可以看到很多无用的转换。
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"))
}
答案 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