【问题标题】:Convert binary value as string to uint32 in Golang在Golang中将二进制值作为字符串转换为uint32
【发布时间】:2019-07-15 19:09:16
【问题描述】:

您好,我正在尝试使用 golang 将 00000000000000000000000000001011 转换为 uint32

var v = "00000000000000000000000000001011"
fmt.Printf("%T\n", v)
c := []byte(v)
u := binary.LittleEndian.Uint32(c)

但它不起作用。

【问题讨论】:

  • “不工作”是什么意思?错误?出乎意料的结果?
  • @govind int(0000000000000000000000000000101) 应该等于 uint32(00000000000000000000000000000101) 而不是 65

标签: go type-conversion


【解决方案1】:

您不能为此使用encoding/binary,因为这是对不同值(例如数字)的(内存)字节进行序列化和反序列化。您所拥有的是数字的基本 2 字符串表示形式。

要获得它的整数值,你必须解析它。为此,请使用strconv.ParseUint():

s := "00000000000000000000000000001011"
u, err := strconv.ParseUint(s, 2, 32)
if err != nil {
    panic(err)
}
fmt.Println(u)

这个输出(在Go Playground上试试):

11

注意strconv.ParseUint()返回一个uint64类型的值,所以如果你需要uint32,你必须手动转换它,例如:

u32 := uint32(u)

还有更多用于从字符串中解析数字的选项,有关概述,请查看Convert string to integer type in Go?

【讨论】:

    【解决方案2】:

    例如,

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func main() {
        s := "00000000000000000000000000001011"
        fmt.Println(s)
        u64, err := strconv.ParseUint(s, 2, 32)
        u32 := uint32(u64)
        if err == nil {
            fmt.Println(u32)
        }
    }
    

    游乐场:https://play.golang.org/p/yiicgWsb7B_M

    输出:

    00000000000000000000000000001011
    11
    

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多