93

我需要通过 TCP 创建一个客户端-服务器示例。在客户端,我读取了 2 个数字并将它们发送到服务器。我面临的问题是我无法从[]byteto转换int,因为通信只接受 type 的数据[]byte

有什么方法可以转换[]byteint我可以发送int到服务器?

一些示例代码将不胜感激。

谢谢。

4

7 回答 7

101

(转发此答案

您可以使用 encoding/binary 的ByteOrder为 16、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)
}
于 2014-10-25T11:37:35.457 回答
15

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

package main
import (
    "fmt"
    "strconv"
)

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

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

于 2019-03-21T10:53:20.713 回答
11

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

例如,如果您想阅读 ints :

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

同一个包允许使用通用读取函数读取具有所需字节顺序的无符号整数或浮点数。

于 2012-06-25T06:53:40.300 回答
8
now := []byte{0xFF,0xFF,0xFF,0xFF}
nowBuffer := bytes.NewReader(now)
var  nowVar uint32
binary.Read(nowBuffer,binary.BigEndian,&nowVar)
fmt.Println(nowVar)
4294967295
于 2020-08-21T08:47:24.857 回答
6

对于编码/解码数字到/从字节序列,有encoding/binary包。文档中有示例:请参阅目录中的示例部分。

这些编码函数在io.Writer接口上运行。net.TCPConn类型实现了io.Writer,因此您可以直接写入/读取网络连接。

如果您在连接的任一侧都有 Go 程序,您可能需要查看使用encoding/gob。有关使用 gob 的演练,请参阅文章“数据 Gobs ”(跳到底部以查看自包含示例)。

于 2012-06-25T07:00:24.523 回答
0

binary.Readinencoding/binary提供将字节数组转换为数据类型的机制。

请注意,网络字节顺序是BigEndian,因此在这种情况下,您需要指定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)
  }

查看此文档可能会有所帮助:https ://pkg.go.dev/encoding/binary@go1.17.1#Read

于 2021-09-20T16:46:26.540 回答
-11
var bs []byte
value, _ := strconv.ParseInt(string(bs), 10, 64)
于 2015-05-07T12:28:23.777 回答