gpt4 book ai didi

go - 使用 Go,如何将未知数量的字节附加到向量中并获取 byte slice 段?

转载 作者:IT王子 更新时间:2023-10-29 01:34:19 25 4
gpt4 key购买 nike

我正在尝试将大量数字编码为字节列表(Go 中的 uint8)。字节数未知,所以我想使用向量。但是Go不提供字节向量,我该怎么办?是否有可能获得这样一个字节向量的一部分?

我打算实现数据压缩。而不是用相同的字节数存储小数和大数,我实现了一个可变字节,它使用较少的字节数和更多的字节数。

我的代码无法编译,类型断言无效:

  1 package main
2
3 import (
4 //"fmt"
5 "container/vector"
6 )
7
8 func vbEncodeNumber(n uint) []byte{
9 bytes := new(vector.Vector)
10 for {
11 bytes.Push(n % 128)
12 if n < 128 {
13 break
14 }
15 n /= 128
16 }
17 bytes.Set(bytes.Len()-1, bytes.Last().(byte)+byte(128))
18 return bytes.Data().([]byte) // <-
19 }
20
21 func main() { vbEncodeNumber(10000) }

我希望将很多这样的代码写入二进制文件,所以我希望 func 可以返回字节数组。

我还没有找到关于 vector 的代码示例。

最佳答案

由于您试图表示大量数字,因此您可能会看到大包是否符合您的目的。

通用的 Vector 结构可用于存储字节。它接受一个空接口(interface)作为它的类型,任何其他类型都满足该接口(interface)。您可以通过 Data 方法检索接口(interface)片段,但如果不复制它就无法将其转换为 byte slice 段。您不能使用类型断言将 interface{} 的一部分变成其他东西的一部分。你必须在你的函数结束时做类似下面的事情:(我还没有尝试编译这段代码,因为我现在不能)

byteSlice = make([]byte, bytes.Len())
for i, _ := range byteSlice {
byteSlice[i] = bytes.At(i).(byte)
}
return byteSlice

关于go - 使用 Go,如何将未知数量的字节附加到向量中并获取 byte slice 段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159792/

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