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