如何将一片Uint64转换成一片Bytes

时间:2016-07-24 02:46:59

标签: go

我目前有一个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数据转换成字节。感谢。

1 个答案:

答案 0 :(得分:0)

可以使用标准库中的encoding/binary包将整数值编码为字节数组。

例如,要将ca编码为字节缓冲区,我们可以使用binary.PutUvarint函数:

tls.createServer

哪个会打印:

uint64

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

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]

(第二个例子是从那个软件包文档中借来的,在那里你会找到其他类似的例子)