我写了一个愚蠢的解决方案,还有更好的配方吗? 正如你所看到的,那里有很多无用的转换.

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"))
}

推荐答案

您需要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)
    }
}

Playground

Go相关问答推荐

如何将泛型函数作为参数传递给golang中的另一个函数?

一种基于时间的Golang函数节制器

GitHub发布Golang子模块

GoFR HTTP服务初始化中Open遥测传输和超时配置的说明

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

GORM:一个表的两个外键

如何为循环扫描的bufio scanner 设置超时?

我们如何保证取消的上下文会导致 goroutine 终止?

如何根据地址和大小打印字符串

io.Reader 无限循环与 fmt.Fscan

golang中如何声明多个接口约束?

速率限制特定端点

具有未导出字段的 struct 类型之间的转换

Golang invopop jsonschema 使用 if/then/else

Golang 工作池实现意外工作

如何获取多个 url 参数值

有没有办法在 golang 中定义可索引类型?

Golang API 的 HTTPS

golangci-lint 的 GitHub 操作失败,无法加载 fmt

如何动态解析 Go Fiber 中的请求正文?