我正在嘗試將大量數字編碼為字節列表(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 關注
- 380 瀏覽
添加回答
舉報
0/150
提交
取消