如何在Go Programming中将[] byte转换为int

Ema*_*uel 65 byte tcp client-server type-conversion go

我需要通过TCP创建一个客户端 - 服务器示例.在客户端,我读了2个数字,然后将它们发送到服务器.我遇到的问题是我无法转换[]byteint,因为通信只接受类型的数据[]byte.

有没有办法转换[]byteint或我可以发送int到服务器?

一些示例代码将非常感激.

谢谢.

Dav*_*rth 68

(转发这个答案)

您可以使用encoding/binary的ByteOrder16,32,64位类型执行此操作

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)
}
Run Code Online (Sandbox Code Playgroud)

  • 抵消是什么意思?在,从[]字节的中间读取?只做BigEndian.Uint64(bigSlice [10:18])(基本上,读取切片中间的字节.或者你的意思是别的吗? (4认同)
  • 它返回uint16,uint32,unit64,但不返回int。需要从uint转换为int (4认同)
  • 是的,我问了这个愚蠢的问题后才想到。只是无法编辑它 :D 不过谢谢。 (2认同)

Den*_*ret 11

从字节数组开始,您可以使用二进制包进行转换.

例如,如果您想要读取整数:

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

同一个包允许使用常规的Read函数读取带有所需字节顺序的unsigned int或float .

  • Varint特定于协议缓冲区,可能不是您正在寻找的.规格:http://code.google.com/apis/protocolbuffers/docs/encoding.html (10认同)
  • 这不适用于OP的用例.请改用"binary.Read()".请参阅:http://codereview.stackexchange.com/questions/15945/effectively-convert-little-endian-byte-slice-to-int32 (3认同)

emm*_*bee 9

提供了一种将二进制切片转换为数字游乐场的math/big简单方法

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)
}
Run Code Online (Sandbox Code Playgroud)


axw*_*axw 6

对于从/到字节序列编码/解码数字,有编码/二进制包.文档中有一些示例:请参阅目录中的"示例"部分.

这些编码功能在io.Writer接口上运行.该net.TCPConn类型实现io.Writer,所以你可以写/直接读取到的网络连接.

如果你在连接的任何一侧有一个Go程序,你可能想看看使用编码/ gob.有关使用gob的演练,请参阅文章" Gobs of data "(跳到底部查看自包含的示例).


Tin*_*goi 5

如果[] byte是ASCII字节数字,则首先将[] byte转换为字符串,然后使用将字符串转换为int 的strconvpackage Atoi方法。

package main
import (
    "fmt"
    "strconv"
)

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

去操场-https: //play.golang.org/p/gEzxva8-BGP

  • 将 int 解析为字符串,然后解析为字节数组并反向解析看起来太长了 (4认同)

Ina*_*Xia 5

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