gpt4 book ai didi

tcp - 在 go 中通过套接字发送 int64 的正确方法

转载 作者:IT王子 更新时间:2023-10-29 00:37:57 26 4
gpt4 key购买 nike

我正在尝试在 golang 中通过 TCP 发送一个 int64,但是,我的接收器打印得到的数字与我发送的数字不同。实现此目的的正确方法是什么?

//Buffer on both client and server
buffer := make([]byte, 1024)

//Sender
fileInfo, error := os.Stat(fileName)
if error != nil {
fmt.Println("Error opening file")
}
var fSize int = int(fileInfo.Size())

connection.Write([]byte(string(fSize)))


//Receiver
connection.Read(buffer)

fileSize := new(big.Int).SetBytes(bytes.Trim(buffer, "\x00")).Int64()
if err != nil {
fmt.Println("not a valid filesize")
fileSize = 0
}

最佳答案

使用 binary.Write/binary.Read :

//sender
err := binary.Write(connection, binary.LittleEndian, fileInfo.Size())
if err != nil {
fmt.Println("err:", err)
}

//receiver
var size int64
err := binary.Read(connection, binary.LittleEndian, &size)
if err != nil {
fmt.Println("err:", err)
}

[]byte(string(fSize)) 并不像您想象的那样,它将数字视为 unicode 字符,它不返回它的字符串表示。

如果你想要一个数字的字符串表示,使用strconv.Itoa ,如果你想要二进制表示,那么使用:

num := make([]byte, 8) // or 4 for int32 or 2 for int16
binary.LittleEndian.PutUint64(num, 1<<64-1)

关于tcp - 在 go 中通过套接字发送 int64 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com