2 回答

TA貢獻1818條經驗 獲得超11個贊
阿西伊85.最大編碼Len()
返回給定輸入字節數的最大輸出字節數。您可以使用此上限估計值。
返回實際使用/寫入的字節數 ascii85。編碼()
。如果將更大的切片傳遞給 ,則必須使用它來對目標切片進行切片,超出此范圍的字節是“垃圾”。Encode()
阿西伊85也是如此。Decode()
:它返回寫入的字節數,如果您傳遞了更大的切片,則必須使用它來切片目標。
此外,由于解碼可能會失?。o效輸入),因此還應檢查返回的錯誤。
此外,由于不能保證給定的輸入將導致輸出是使用的32位塊的倍數,因此請傳遞以使用給定的輸入切片(而不是等待更多輸入)。flush=true
最終的更正代碼:
s := []byte("Hello, playground")
maxlen := ascii85.MaxEncodedLen(len(s))
dst := make([]byte, maxlen)
n := ascii85.Encode(dst, s)
dst = dst[:n]
fmt.Println(string(dst))
dst2 := make([]byte, maxlen)
n, _, err := ascii85.Decode(dst2, dst, true)
if err != nil {
panic(err)
}
dst2 = dst2[:n]
fmt.Println(string(dst2))
哪些輸出:
87cURD_*#MCghU%Ec6)<A,
Hello, playground

TA貢獻1803條經驗 獲得超3個贊
系統.文本.ASCII編碼和編碼/ascii85包執行不同的操作。系統.文本.ASCII 編碼通過將 ASCII 范圍之外的字符替換為 。編碼/ascii85 包將二進制數據編碼為 ascii85,也稱為 base85。?
以下 Go 函數復制了問題中的 C# 函數:
func StrToByteArray(str string) []byte {
var result []byte
for _, r := range str {
if r >= utf8.RuneSelf {
r = '?'
}
result = append(result, byte(r))
}
return result
}
如果您知道字符串僅包含 ASCII 字符,則轉換將起作用:
func StrToByteArray(str string) []byte { return []byte(str) }
- 2 回答
- 0 關注
- 114 瀏覽
添加回答
舉報