登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: golang中encoding/base32包[zt]     [回主站]     [分站链接]
golang中encoding/base32包[zt]
clq
浏览(281) - 2018-12-23 22:22:13 发表 编辑

关键字: golang

[2018-12-23 22:26:48 最后更新]
golang中encoding/base32包[zt]

https://www.codercto.com/a/44917.html


golang中encoding/base32包
  发布时间:2018-12-12 21:35   文章分类:Go 浏览数: 12

    文章来源: studygolang.com/articles/16847......, 本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

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。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 Coder·码农网



clq  2018-12-23 22:26:48 发表 编辑


作者原地址应该是 https://www.jianshu.com/u/a0e226915ac1
他的文章都写得不错。




总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录
golang新技术 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1