gpt4 book ai didi

go - 如何将一片 Uint64 变成一片字节

转载 作者:IT王子 更新时间:2023-10-29 02:23:02 27 4
gpt4 key购买 nike

我目前有一个如下所示的 protobuf 结构:

type RequestEnvelop_MessageQuad struct {
F1 [][]byte `protobuf:"bytes,1,rep,name=f1,proto3" json:"f1,omitempty"`
F2 []byte `protobuf:"bytes,2,opt,name=f2,proto3" json:"f2,omitempty"`
Lat float64 `protobuf:"fixed64,3,opt,name=lat" json:"lat,omitempty"`
Long float64 `protobuf:"fixed64,4,opt,name=long" json:"long,omitempty"`
}

F1 使用我生成的一些 S2 几何数据,如下所示:

ll := s2.LatLngFromDegrees(location.Latitude, location.Longitude)
cid := s2.CellIDFromLatLng(ll).Parent(15)
walkData := []uint64{cid.Pos()}

next := cid.Next()
prev := cid.Prev()

// 10 Before, 10 After
for i := 0; i < 10; i++ {
walkData = append(walkData, next.Pos())
walkData = append(walkData, prev.Pos())

next = next.Next()
prev = prev.Prev()
}

log.Println(walkData)

唯一的问题是,protobuf 结构需要一种 [][]byte 我只是不确定如何将 uint64 数据转换为字节。谢谢。

最佳答案

整数值可以用 encoding/binary 编码成字节数组来自标准库的包。

例如,要将 uint64 编码到字节缓冲区中,我们可以使用 binary.PutUvarint功能:

big := uint64(257)
buf := make([]byte, 2)
n := binary.PutUvarint(buf, big)
fmt.Printf("Wrote %d bytes into buffer: [% x]\n", n, buf)

哪个会打印:

Wrote 2 bytes into buffer: [81 02]

我们还可以使用 binary.Write 将通用流写入缓冲区功能:

buf := new(bytes.Buffer)
var pi float64 = math.Pi
err := binary.Write(buf, binary.LittleEndian, pi)
if err != nil {
fmt.Println("binary.Write failed:", err)
}
fmt.Printf("% x", buf.Bytes())

哪些输出:

18 2d 44 54 fb 21 09 40

(第二个示例是从该包文档中借用的,您可以在其中找到其他类似的示例)

关于go - 如何将一片 Uint64 变成一片字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548263/

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