在Golang中将二进制值作为字符串转换为uint32

时间:2019-02-21 19:01:18

标签: go type-conversion

您好,我正尝试使用

将0000000000000000000000000000101011转换为golang中的uint32
var v = "00000000000000000000000000001011"
fmt.Printf("%T\n", v)
c := []byte(v)
u := binary.LittleEndian.Uint32(c)

但是它不起作用。

2 个答案:

答案 0 :(得分:6)

您不能为此使用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?

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