我需要通过 TCP 创建一个客户端-服务器示例。在客户端,我读取了 2 个数字并将它们发送到服务器。我面临的问题是我无法从[]byte
to转换int
,因为通信只接受 type 的数据[]byte
。
有什么方法可以转换[]byte
或int
我可以发送int
到服务器?
一些示例代码将不胜感激。
谢谢。
我需要通过 TCP 创建一个客户端-服务器示例。在客户端,我读取了 2 个数字并将它们发送到服务器。我面临的问题是我无法从[]byte
to转换int
,因为通信只接受 type 的数据[]byte
。
有什么方法可以转换[]byte
或int
我可以发送int
到服务器?
一些示例代码将不胜感激。
谢谢。
如果 []byte 是 ASCII 字节数,则首先将 []byte 转换为字符串,然后使用将字符串转换为 int 的strconv
封装Atoi
方法。
package main
import (
"fmt"
"strconv"
)
func main() {
byteNumber := []byte("14")
byteToInt, _ := strconv.Atoi(string(byteNumber))
fmt.Println(byteToInt)
}
从字节数组开始,您可以使用二进制包进行转换。
例如,如果您想阅读 ints :
buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)
同一个包允许使用通用读取函数读取具有所需字节顺序的无符号整数或浮点数。
now := []byte{0xFF,0xFF,0xFF,0xFF}
nowBuffer := bytes.NewReader(now)
var nowVar uint32
binary.Read(nowBuffer,binary.BigEndian,&nowVar)
fmt.Println(nowVar)
4294967295
对于编码/解码数字到/从字节序列,有encoding/binary包。文档中有示例:请参阅目录中的示例部分。
这些编码函数在io.Writer接口上运行。net.TCPConn类型实现了io.Writer,因此您可以直接写入/读取网络连接。
如果您在连接的任一侧都有 Go 程序,您可能需要查看使用encoding/gob。有关使用 gob 的演练,请参阅文章“数据 Gobs ”(跳到底部以查看自包含示例)。
binary.Read
inencoding/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
var bs []byte
value, _ := strconv.ParseInt(string(bs), 10, 64)