对于将数字编码到字节序列或从字节序列解码数字,有encoding/binary包,文档中有示例:参见目录中的示例部分。 这些编码函数在io.Writer接口上操作。net.TCPConn类型实现了io.Writer,因此您可以直接对网络连接进行读写。 如果你在连接的两端都有Go语言程序,你可能会想看看encoding/gob的用法,参见文章“Gobs of data“,了解gob的用法(跳到底部,看一个独立的例子)。
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)
}
9条答案
按热度按时间mcdcgff01#
对于将数字编码到字节序列或从字节序列解码数字,有encoding/binary包,文档中有示例:参见目录中的示例部分。
这些编码函数在io.Writer接口上操作。net.TCPConn类型实现了io.Writer,因此您可以直接对网络连接进行读写。
如果你在连接的两端都有Go语言程序,你可能会想看看encoding/gob的用法,参见文章“Gobs of data“,了解gob的用法(跳到底部,看一个独立的例子)。
t8e9dugd2#
使用不带附加依赖项的位运算符
wgxvkvu93#
encoding/binary
中的binary.Read
提供了将字节数组转换为数据类型的机制。请注意,网络字节顺序是BigEndian,因此在本例中,您需要指定
binary.BigEndian
。查看此文档可能会有所帮助:https://pkg.go.dev/encoding/binary@go1.17.1#Read
sczxawaw4#
如果
[]byte
数组中的字节是从0到9的ASCII字符,则可以在循环中将它们转换为int
:Go Playground
wvmv3b1j5#
您可以使用encoding/binary的ByteOrder为16、32、64位类型执行此操作
Play
s8vozzvw6#
如果[]byte是ASCII字节数,则首先将[]byte转换为string,然后使用
strconv
包Atoi
方法将string转换为int。Go playground
t9eec4r07#
从字节数组开始,您可以使用binary package来执行转换。
例如,如果要读取int:
同一个包允许使用通用的Read函数,按照所需的字节顺序阅读unsigned int或float。
k7fdbhmy8#
ev7lccsx9#
math/big
提供了一种将二进制切片转换为数字playground的简单方法