Go中base64和hex的编码解码
base64
Go官方库中encoding/base64包实现了base64的相关编码解码操作
常量
var StdPadding = '=' var NoPadding = -1 var StdEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/") RFC4648定义的标准base64编码字符集,使用"="末尾填充 RawStdEncoding :不使用末尾填充 相当于StdEncoding.WithPadding(NoPadding) var URLEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_") RFC4648定义的另一base64编码字符集,用于URL和文件名,使用"="末尾填充 就是修改了最后两个在url或文件名中有特殊意义的字符 RawURLEncoding :不使用末尾填充 相当于URLEncoding.WithPadding(NoPadding)
type Encoding struct {}
根据一个64字符的字符集定义的双向编码/解码协议
NewEncoding(encoder string) Encoding:使用指定的64字节字符集生成一个Encoding,默认使用"="末尾填充
AppendEncode(dst, src []byte) []byte :将src数据进行base64编码后附加到dst,返回src的base64编码 AppendDecode(dst, src []byte) ([]byte, error) :将base64编码的src解码后附加到dst 返回src解码后的数据 如果输入格式不正确,返回src的部分解码数据和一个错误 EncodedLen(n int) int :返回n字节数据进行base64编码后的最大长度 Encode(dst, src []byte) :将src的数据进行base64编码后存入dst 最多写如EncodedLen(len(src))字节数据到dst,并返回写入的字节数 EncodeToString(src []byte) string :返回将src编码后的字符串 DecodedLen(n int) int :返回n字节base64编码的数据解码后的最大长度 Decode(dst, src []byte) (n int, err error) :将src的base64编码数据解码后存入dst 最多写入DecodedLen(len(src))字节数据到dst,并返回写入的字节数 如果src包含非法字符,将返回成功写入的字符数和CorruptInputError 换行符(\r、\n)会被忽略 DecodeString(s string) ([]byte, error) :返回base64编码的字符串s解码后的数据 WithPadding(padding rune) *Encoding :创建一个指定末尾填充的新编码 base64包提供了两个常量作为padding的值,StdPadding表示"="(默认值),NoPadding表示禁用末尾填充 填充字符不能是'\r'或'\n',不能包含在编码的字母表中,不能是负数 必须是等于或小于'\xff'的字符 Strict() *Encoding :创建一个"0"末尾填充的新编码
NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser :创建一个新的base64流编码器
写入的数据会在进行base64编码后再写入w 写入完毕后,使用者必须调用Close方法以便将未写入的数据从缓存中刷新到w中
NewDecoder(enc *Encoding, r io.Reader) io.Reader :创建一个新的base64流解码器
hex
Go官方库中encoding/hex包实现了16进制字符表示的编解码
AppendEncode(dst, src []byte) []byte :将src进行十六进制编码并附加到dst,返回src编码的数据
AppendDecode(dst, src []byte) ([]byte, error) :将十六进制的src解码后附加到dst
返回src解码的数据 如果输入格式不正确,返回src的部分解码的和一个错误
EncodedLen(n int) int :长度x的数据进行十六进制编码后的长度
Encode(dst, src []byte) int :将src的数据编码为十六进制并写入dst,返回实际写入dst的字节数
EncodeToString(src []byte) string :将数据src编码为十六进制字符串
DecodedLen(x int) int :长度x的编码数据解码后的明文数据的长度
Decode(dst, src []byte) (int, error) :将十六进制的src解码并写入dst
返回实际写入dst的字节数 期望src仅包含十六进制字符,并且长度为偶数 如果输入的格式不正确,将返回错误发生前解码的字节数
DecodeString(s string) ([]byte, error) :返回十六进制的字符串s代表的数据
NewDecoder(r io.Reader) io.Reader :创建一个从r中读取十六进制数据并解码的解码器
NewEncoder(w io.Writer) io.Writer :创建一个将数据进行十六进制编码后写入w的编码器