亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用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 關注
  • 380 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號