How to convert from []byte to int in Go Programming

TcpClient ServerByteType ConversionGo

Tcp Problem Overview


I need to create a client-server example over TCP. In the client side I read 2 numbers and I send them to the server. The problem I faced is that I can't convert from []byte to int, because the communication accept only data of type []byte.

Is there any way to convert []byte to int or I can send int to the server?

Some sample code will be really appreciated.

Thanks.

Tcp Solutions


Solution 1 - Tcp

You can use encoding/binary's ByteOrder to do this for 16, 32, 64 bit types

Play

package main

import "fmt"
import "encoding/binary"

func main() {
	var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
	data := binary.BigEndian.Uint64(mySlice)
	fmt.Println(data)
}

Solution 2 - Tcp

If []byte is ASCII byte numbers then first convert the []byte to string and use the strconv package Atoi method which convert string to int.

package main
import (
	"fmt"
	"strconv"
)

func main() {
	byteNumber := []byte("14")
	byteToInt, _ := strconv.Atoi(string(byteNumber))
	fmt.Println(byteToInt)
}

go playground - https://play.golang.org/p/gEzxva8-BGP

Solution 3 - Tcp

Starting from a byte array you can use the binary package to do the conversions.

For example if you want to read ints :

buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)

The same package allows the reading of unsigned int or floats, with the desired byte orders, using the general Read function.

Solution 4 - Tcp

now := []byte{0xFF,0xFF,0xFF,0xFF}
nowBuffer := bytes.NewReader(now)
var  nowVar uint32
binary.Read(nowBuffer,binary.BigEndian,&nowVar)
fmt.Println(nowVar)
4294967295

Solution 5 - Tcp

For encoding/decoding numbers to/from byte sequences, there's the encoding/binary package. There are examples in the documentation: see the Examples section in the table of contents.

These encoding functions operate on io.Writer interfaces. The net.TCPConn type implements io.Writer, so you can write/read directly to network connections.

If you've got a Go program on either side of the connection, you may want to look at using encoding/gob. See the article "Gobs of data" for a walkthrough of using gob (skip to the bottom to see a self-contained example).

Solution 6 - Tcp

The math/big provides a simple and easy way to convert a binary slice to a number playground

package main
import (
	"fmt"
	"math/big"
)
func main() {

	b := []byte{0x01, 0x00, 0x01}

	v := int(big.NewInt(0).SetBytes(b).Uint64())

	fmt.Printf("%v", v)
}

Solution 7 - Tcp

binary.Read in encoding/binary provides mechanisms to convert byte arrays to datatypes.

Note that Network Byte Order is BigEndian, so in this case, you'll want to specify binary.BigEndian.

  package main

  import (
  	"bytes"
  	"encoding/binary"
	"fmt"
  )

  func main() {
  	var myInt int
  	b := []byte{0x18, 0x2d} // This could also be a stream
	buf := bytes.NewReader(b)
	err := binary.Read(buf, binary.BigEndian, &myInt) // Make sure you know if the data is LittleEndian or BigEndian
	if err != nil {
		fmt.Println("binary.Read failed:", err)
        return
	}
	fmt.Print(myInt)
  }

Reviewing this documentation may be helpful: https://pkg.go.dev/encoding/[email protected]#Read

Solution 8 - Tcp

var bs []byte
value, _ := strconv.ParseInt(string(bs), 10, 64)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEmanuelView Question on Stackoverflow
Solution 1 - TcpDavid BudworthView Answer on Stackoverflow
Solution 2 - TcpTinkaal GogoiView Answer on Stackoverflow
Solution 3 - TcpDenys SéguretView Answer on Stackoverflow
Solution 4 - TcpInasa XiaView Answer on Stackoverflow
Solution 5 - TcpaxwView Answer on Stackoverflow
Solution 6 - TcpmeblumView Answer on Stackoverflow
Solution 7 - TcpPhilip ConstantinouView Answer on Stackoverflow
Solution 8 - TcpelhusseinView Answer on Stackoverflow