第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么 Base64 緩沖區(qū)大小會(huì)使其大于基礎(chǔ)文本的長(zhǎng)度?

為什么 Base64 緩沖區(qū)大小會(huì)使其大于基礎(chǔ)文本的長(zhǎng)度?

Go
郎朗坤 2023-02-21 16:28:24
我正在嘗試將字節(jié)數(shù)組編碼為 Base64 并遇到兩個(gè)問(wèn)題。我可以用 來(lái)做到這一點(diǎn)base64.StdEncoding.EncodedLen(text),但我擔(dān)心這很昂貴,所以我想看看我是否可以用 來(lái)做到這一點(diǎn)len(text)。這是代碼(這些函數(shù)被命名為“Marshal”,因?yàn)槲以?JSON 封送處理期間將它們用作字段轉(zhuǎn)換器):package mainimport (    "crypto/rand"    "encoding/base64"    "fmt")func main() {    b := make([]byte, 60)    _, _ = rand.Read(b)    // Marshal Create Dst Buffer    MarshalTextBuffer(b)    // Marshal Convert to String    MarshalTextStringWithBufferLen(b)    // Marshal Convert to String    MarshalTextStringWithDecodedLen(b)}func MarshalTextBuffer(text []byte) error {    ba := base64.StdEncoding.EncodeToString(text)    fmt.Println(ba)    return nil}func MarshalTextStringWithBufferLen(text []byte) error {    ba := make([]byte, len(text)+30) // Why does len(text) not suffice? Temporarily using '30' for now, just so it doesn't overrun.    base64.StdEncoding.Encode(ba, text)    fmt.Println(ba)    return nil}func MarshalTextStringWithDecodedLen(text []byte) error {    ba := make([]byte, base64.StdEncoding.EncodedLen(len(text)))    base64.StdEncoding.Encode(ba, text)    fmt.Println(ba)    return nil}這是輸出:IL5CW8T9WSgwU5Hyi9JsLLkU/EcydY6pG2fgLQJsMaXgxhSh74RTagzr6b9yDeZ8CP4Azc8xqq5/+Cgk[73 76 53 67 87 56 84 57 87 83 103 119 85 53 72 121 105 57 74 115 76 76 107 85 47 69 99 121 100 89 54 112 71 50 102 103 76 81 74 115 77 97 88 103 120 104 83 104 55 52 82 84 97 103 122 114 54 98 57 121 68 101 90 56 67 80 52 65 122 99 56 120 113 113 53 47 43 67 103 107 0 0 0 0 0 0 0 0 0 0][73 76 53 67 87 56 84 57 87 83 103 119 85 53 72 121 105 57 74 115 76 76 107 85 47 69 99 121 100 89 54 112 71 50 102 103 76 81 74 115 77 97 88 103 120 104 83 104 55 52 82 84 97 103 122 114 54 98 57 121 68 101 90 56 67 80 52 65 122 99 56 120 113 113 53 47 43 67 103 107]為什么中間的MarshalTextStringWithBufferLen需要額外的填充?是base64.StdEncoding.EncodedLen一個(gè)代價(jià)高昂的函數(shù)(比如我可以用底層函數(shù)解決它,但我擔(dān)心成本)。
查看完整描述

1 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

Base-64 編碼將二進(jìn)制數(shù)據(jù)(每字節(jié) 8 位)存儲(chǔ)為文本(每字節(jié)使用 6 位),因此每 3 個(gè)字節(jié)被編碼為 4 個(gè)字節(jié)(3x8 = 4x6)。所以len(text) + 30在你的代碼中是錯(cuò)誤的,并且應(yīng)該是len(text)*4/3(如果 len(text) 可以被 3 整除)但是為了提高可讀性并避免你應(yīng)該用來(lái)base64.StdEncoding.EncodedLen()獲取長(zhǎng)度的錯(cuò)誤。

如果您查看代碼,base64.StdEncoding.EncodedLen您會(huì)發(fā)現(xiàn)它與您自己進(jìn)行計(jì)算一樣快(特別是因?yàn)樗莾?nèi)聯(lián)的)。


查看完整回答
反對(duì) 回復(fù) 2023-02-21
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)