根据不同长度的字符串将字符串编码为其 ASCII 表示形式

我想使用ASCII编码在Go中对字符串进行编码,如下所示的C#函数:


public static byte[] StrToByteArray(string str)

        {


            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

            return encoding.GetBytes(str);

        }

我知道如何使用下面的功能来做到这一点:


import (

        "encoding/ascii85"

    "fmt"

)

func main() {

        dst := make([]byte, 25, 25)

        dst2 := make([]byte, 25, 25)

        ascii85.Encode(dst, []byte("Hello, playground"))

        fmt.Println(dst) 

        ascii85.Decode(dst2, dst, false)

        fmt.Println(string(dst2))

}

目前,它被硬编码为25的长度。如何根据字符串的大小调整长度?


倚天杖
浏览 89回答 2
2回答

慕尼黑8549860

阿西伊85.最大编码Len()&nbsp;返回给定输入字节数的最大输出字节数。您可以使用此上限估计值。返回实际使用/写入的字节数&nbsp;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 {&nbsp; &nbsp; panic(err)}dst2 = dst2[:n]fmt.Println(string(dst2))哪些输出:87cURD_*#MCghU%Ec6)<A,Hello, playground

繁星点点滴滴

系统.文本.ASCII编码和编码/ascii85包执行不同的操作。系统.文本.ASCII 编码通过将 ASCII 范围之外的字符替换为 。编码/ascii85 包将二进制数据编码为&nbsp;ascii85,也称为 base85。?以下 Go 函数复制了问题中的 C# 函数:func StrToByteArray(str string) []byte {&nbsp; &nbsp; var result []byte&nbsp; &nbsp; for _, r := range str {&nbsp; &nbsp; &nbsp; &nbsp; if r >= utf8.RuneSelf {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = '?'&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; result = append(result, byte(r))&nbsp; &nbsp; }&nbsp; &nbsp; return result}如果您知道字符串仅包含 ASCII 字符,则转换将起作用:func StrToByteArray(str string) []byte { return []byte(str) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go