2 回答
TA贡献1818条经验 获得超11个赞
阿西伊85.最大编码Len()
返回给定输入字节数的最大输出字节数。您可以使用此上限估计值。
返回实际使用/写入的字节数 ascii85。编码()
。如果将更大的切片传递给 ,则必须使用它来对目标切片进行切片,超出此范围的字节是“垃圾”。Encode()
阿西伊85也是如此。Decode()
:它返回写入的字节数,如果您传递了更大的切片,则必须使用它来切片目标。
此外,由于解码可能会失败(无效输入),因此还应检查返回的错误。
此外,由于不能保证给定的输入将导致输出是使用的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 关注
- 87 浏览
添加回答
举报