您好,我正尝试使用
将0000000000000000000000000000101011转换为golang中的uint32var v = "00000000000000000000000000001011"
fmt.Printf("%T\n", v)
c := []byte(v)
u := binary.LittleEndian.Uint32(c)
但是它不起作用。
答案 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