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

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

根據不同長度的字符串將字符串編碼為其 ASCII 表示形式

根據不同長度的字符串將字符串編碼為其 ASCII 表示形式

Go
倚天杖 2022-10-04 19:38:06
我想使用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的長度。如何根據字符串的大小調整長度?
查看完整描述

2 回答

?
慕尼黑8549860

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


查看完整回答
反對 回復 2022-10-04
?
繁星點點滴滴

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) }


查看完整回答
反對 回復 2022-10-04
  • 2 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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