2 回答
TA贡献2051条经验 获得超10个赞
由于输入以 8 位字节编码,但输出以 6 位(radix-64)字节编码,因此输出需要是输入大小的 8/6 = 4/3 倍。所以这应该有效:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
str := "c29tZSBkYXRhIHdpdGggACBhbmQg77u/"
dst := make([]byte, len(str)*len(str)/base64.StdEncoding.DecodedLen(len(str)))
_, err := base64.StdEncoding.Decode(dst, []byte(str))
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Printf("%s\n", dst)
}
基于其中的实现,DecodedLen()一般情况下返回输入长度的3/4倍:
// DecodedLen returns the maximum length in bytes of the decoded data
// corresponding to n bytes of base64-encoded data.
func (enc *Encoding) DecodedLen(n int) int {
if enc.padChar == NoPadding {
// Unpadded data may end with partial block of 2-3 characters.
return n * 6 / 8
}
// Padded base64 should always be a multiple of 4 characters in length.
return n / 4 * 3
}
但最后,我最终只是将输入转换为字符串并使用,DecodeString()因为它已经体现了这个逻辑。
- 2 回答
- 0 关注
- 143 浏览
添加回答
举报