Преобразовать двоичное значение в виде строки в uint32 в Голанге - PullRequest
0 голосов
/ 21 февраля 2019

Здравствуйте, я пытаюсь преобразовать 00000000000000000000000000001011 в uint32 в golang, используя

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

Однако это не работает.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Например,

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
0 голосов
/ 21 февраля 2019

Вы не можете использовать 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)

Для разбора чисел из строк есть ещеобзор, проверьте Преобразовать строку в целочисленный тип в Go?

...