内容简介: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。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cascading Style Sheets 2.0 Programmer's Reference
Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99
The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!