0

Hello i am trying to convert 00000000000000000000000000001011 to uint32 in golang using

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

However it is not working.

2
  • 1
    "Not working" means what? Errors? Unexpected results? Commented Feb 21, 2019 at 19:06
  • @govind int(0000000000000000000000000000101) should equal uint32(0000000000000000000000000000101) instead got 65 Commented Feb 21, 2019 at 19:13

2 Answers 2

11

You can't use encoding/binary for this, as that is to serialize and deserialize the (memory) bytes of different values (e.g. numbers). What you have is the base 2 string representation of the number.

To get its integer value you have to parse it. For that, use strconv.ParseUint():

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

This outputs (try it on the Go Playground):

11

Note that strconv.ParseUint() returns a value of type uint64, so if you need uint32, you have to manually convert it, e.g.:

u32 := uint32(u)

There are more options for parsing numbers from strings, for an overview, check Convert string to integer type in Go?

Sign up to request clarification or add additional context in comments.

Comments

2

For example,

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

Playground: https://play.golang.org/p/yiicgWsb7B_M

Output:

00000000000000000000000000001011
11

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.