我正在尝试在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
}
Run Code Online (Sandbox Code Playgroud)
//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)
}
Run Code Online (Sandbox Code Playgroud)
[]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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3564 次 |
最近记录: |