使用Go,如何将未知数量的字节追加到向量中并获取字节切片?

我正在尝试将大量数字编码为字节列表(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的代码示例。


慕妹3242003
浏览 347回答 3
3回答

猛跑小猪

看一下字节包和那里的Buffer类型。您可以将int作为字节写入缓冲区,然后可以使用Bytes()方法访问缓冲区的字节片。

BIG阳

由于通用的附加和复制已添加到语言中,因此我发现矢量的用途要少得多。这是我减少复制的一次拍摄的方式:package mainimport "fmt"func vbEncodeNumber(n uint) []byte {&nbsp; &nbsp; bytes := make([]byte, 0, 4)&nbsp; &nbsp; for n > 0 {&nbsp; &nbsp; &nbsp; &nbsp; bytes = append(bytes, byte(n%256))&nbsp; &nbsp; &nbsp; &nbsp; n >>= 8&nbsp; &nbsp; }&nbsp; &nbsp; return bytes}func main() {&nbsp; &nbsp; bytes := vbEncodeNumber(10000)&nbsp; &nbsp; for i := len(bytes)-1; i >= 0 ; i-- {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("%02x ", bytes[i])&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println("")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go