我正在尝试将大量数字编码为字节列表(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的代码示例。
3 回答
BIG阳
TA贡献1859条经验 获得超6个赞
由于通用的附加和复制已添加到语言中,因此我发现矢量的用途要少得多。这是我减少复制的一次拍摄的方式:
package main
import "fmt"
func vbEncodeNumber(n uint) []byte {
bytes := make([]byte, 0, 4)
for n > 0 {
bytes = append(bytes, byte(n%256))
n >>= 8
}
return bytes
}
func main() {
bytes := vbEncodeNumber(10000)
for i := len(bytes)-1; i >= 0 ; i-- {
fmt.Printf("%02x ", bytes[i])
}
fmt.Println("")
}
- 3 回答
- 0 关注
- 346 浏览
添加回答
举报
0/150
提交
取消