为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕妹3242003 2021-04-09 08:36:15
我正在尝试将大量数字编码为字节列表(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 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-04-26
?
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("")

}


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 346 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信