golang中encoding/base32包

栏目: Go · 发布时间: 7年前

内容简介: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

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》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具