内容简介:1、golang中base32包是什么?2、base32给我们开发者提供了什么?以及用法?3、编码与解码各有哪几种操作?
1、golang中base32包是什么?
2、base32给我们开发者提供了什么?以及用法?
3、编码与解码各有哪几种操作?
一、golang中base32包是什么?
这个包实现了 RFC 4648 定义的 base32 编码。
二、base32给我们开发者提供了什么?
变量:
RFC 4648 定义的标准 base32 编码。
var StdEncoding = NewEncoding(encodeStd)
RFC 4648 里定义的"Extended Hex Alphabet",一般用于DNS
var HexEncoding = NewEncoding(encodeHex)
函数:
1)func NewDecoder(enc *Encoding, r io.Reader) io.Reader 2)func HexEncoding(enc *Encoding, w io.Writer) io.WriteCloser
CorruptlnputError类型:
1)func (e CorruplnputError) Error() string Encoding类型: 1)func NewEncoding(encoder string) *Encoding 2)func (enc *Encoding) Decode(dst, src []byte) (n int, err error) 3)func (enc *Encoding) DecodeString(s string) ([]byte, error) 4)func (enc *Encoding) DecodedLen(n int) int 5)func (enc *Encoding) Encode(dst, src []byte) 6)func (enc *Encoding) EncodeToString(src []byte) string 7)func (enc *Encoding) Encoden(n int) int
功能详解:
1)func NewDecoder(enc *Encoding, r io.Reader) io.Reader
参数列表: 1)enc Encoding 结构指针 2)w io.Reader 接口 返回值: io.Reader 接口 功能说明: 返回一个io.Reader 接口,用于流式解码
代码实例:
package main import ( "strings" "encoding/base32" "fmt" ) func main() { src := "ORUGS4ZANFZSAYJAORSXG5BAON2HE2LOM4XA====" reader := strings.NewReader(src) dst := "" decoder := base32.NewDecoder(base32.StdEncoding, reader) // 使用一个很小的输出buffer,测试流式解码 buf := make([]byte, 2) for { n, err := decoder.Read(buf) if err != nil || n == 0 { break } dst += string(buf[:n]) fmt.Println(dst) } }
2)func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
参数列表: 1)enc Encoding 结构体 2)w io.Writer 接口 返回值: io.WriteCloser 接口 功能说明: 返回一个io.WriteCloser接口,用于流式编码
代码实例:
package main import ( "encoding/base32" "os" ) func main() { encoder := base32.NewEncoder(base32.StdEncoding, os.Stdout) encoder.Write([]byte("this is a test string.")) encoder.Close() }
3)func NewEncoding(encoder string) *Encoding
参数列表: encoder 32字节长的字符串,用做转换表 返回值: Encoding结构体 功能说明: 计算 base32 解码输出需要的最大字节数
代码实例:
package main import ( "encoding/base32" "fmt" ) func main() { encodeTest := "--------------------------------" enc :=base32.NewEncoding(encodeTest) src := "this is a test string." dst := enc.EncodeToString([]byte(src)) // 最后不足8字节的会用"="补全 fmt.Println(dst) fmt.Println(len(dst)) }
4)func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
参数列表: dst 解码缓冲区 src 要解码的字符串切片 返回值: n 解码到缓冲区的字节数 err 可能的错误 功能说明: 对输入的字符串进行base32 解码
代码实例:
package main import ( "encoding/base32" "log" "fmt" ) func main() { src := []byte("ORUGS4ZANFZSAYJAORSXG5BAON2HE2LOM4XA====") // 解码后数据的最长长度 maxLen := base32.StdEncoding.DecodedLen(len(src)) // 解码后的缓存区 dst := make([]byte, maxLen) // base32 解码 n, err := base32.StdEncoding.Decode(dst, src) // 打印解码的数据 if err != nil { log.Fatalln(err) } fmt.Println("解码后的数据:", string(dst[:n])) }
5)func (enc *Encoding) DecodeString(s string) ([]byte, error)
参数列表: s 是要进行 base32 解码的字符串 返回值: 经过base32解码后的字符串切片 可能的错误 功能说明: 对传入的字符串进行base32解码
代码实例:
package main import ( "encoding/base32" "log" "fmt" ) func main() { src := "ORUGS4ZANFZSAYJAORSXG5BAON2HE2LOM4XA====" dst, err := base32.StdEncoding.DecodeString(src) if err != nil { log.Fatalln(err) } fmt.Println("解码后数据:", string(dst)) }
6)func (enc *Encoding) DecodedLen(n int) int
参数列表: n 表示要进行base32 解码的字节数 返回值: base32 解码输出需要的最大字节数 功能说明: 计算 base32 解码输出需要的最大字节数
代码实例:
package main import ( "encoding/base32" "fmt" ) func main() { src := "ORUGS4ZANFZSAYJAORSXG5BAON2HE2LOM4XA====" maxLen := base32.StdEncoding.DecodedLen(len(src)) fmt.Println("解码后的数据最长为:", maxLen) }
7)func (enc *Encoding) Encode(dst, src []byte)
参数列表: dst 编码缓冲区 src 要编码的字符串切片 返回值: 无 功能说明: 对输入的字符串进行base32编码
代码实例:
package main import ( "encoding/base32" "fmt" ) func main() { src := []byte("this is a test string.") maxLen := base32.StdEncoding.EncodedLen(len(src)) dst := make([]byte, maxLen) base32.StdEncoding.Encode(dst, src) fmt.Println("编码后的数据为:", string(dst)) }
8)func (enc *Encoding) EncodeToString(src []byte) string
参数列表: src 要进行 base32 编码的字符串切片 返回值: 经过base32 编码后的字符串 功能说明: 对传入的字符串切片进行 base32 编码
代码实例:
package main import ( "encoding/base32" "fmt" ) func main() { src := []byte("this is a test string.") dst := base32.StdEncoding.EncodeToString(src) fmt.Println("编码后的数据为:", dst) }
9)func (enc *Encoding) EncodedLen(n int) int
参数列表: n 要进行 base32 编码的字节数 返回值: 经过 base32 编码后的字节数 功能说明: 计算编码输出的字节数
代码实例:
package main import ( "encoding/base32" "fmt" ) func main() { src := []byte("this is a test string.") maxLen := base32.StdEncoding.EncodedLen(len(src)) fmt.Println("编码后的数据长度为:", maxLen) }
三、进行编码和解码的几种方式
编码:
1)方法一:base32.StdEncoding.Encode
2)方法二:
base32.StdEncoding.EncodeToString
解码:
1)方法一:base32.StdEncoding.Decode
2)方法二:base32.StdEncoding.DecodeString
不管是编码还是解码,方法一和方法二不同之处是传入的是[]byte、还是string。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Lighttpd源码分析
高群凯 / 机械工业出版社 / 2010-3 / 59.00元
本书主要针对lighttpd源码进行了深度剖析。主要内容包括:lighttpd介绍与分析准备工作、lighttpd网络服务主模型、lighttpd数据结构、伸展树、日志系统、文件状态缓存器、配置信息加载、i/o多路复用技术模型、插件链、网络请求服务响应流程、请求响应数据快速传输方式,以及基本插件模块。本书针对的lighttpd项目版本为稳定版本1.4.20。 本书适合使用lighttpd的人......一起来看看 《Lighttpd源码分析》 这本书的介绍吧!