美文网首页go语言
golang中encoding/base64包

golang中encoding/base64包

作者: ljh123 | 来源:发表于2018-12-11 20:01 被阅读0次

go标准库中的base32包与base64包的提供的方法以及使用几乎一至,不同的地方就是就是底层实现,一个是进行base32编解码操作,另一个是进行base64编解码操作。如果是已经知道go base32包的使用的话,可以不用看下面的内容,或者是简单的过一遍。

1、golang中的base64包中有什么内容?
2、base64给我们开发者提供了什么?以及用法?
3、编码与解码各有哪几种操作?

一、golang中的base64包中有什么内容?
这个包实现了RFC 4648 里定义的 base64 编码。封装了base64的编解码操作。
二、base64给我们开发者提供了什么?以及用法?
变量
RFC 4648 里定义的标准 base64 编码方法

var StdEncoding = NewEncoding(encodeStd)

修改过的 base64 编码,一般用于URL和文件名

var URLEncoding = NewEncoding(encodeURL)

函数:

func NewDecoder(enc *Encoding, r io.Reader) io.Reader
func NewEncoder(enc *Encoding, r io.Writer) io.WriteCloser

CorruptinputError 类型

func (e CorruptinputError) Error() string

Encoding 类型

func NewEncoding(encoder string) *Encoding
func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
func (enc *Encoding) DecodeString(s string) ([]byte, error)
func (enc *Encoding) DecodedLen(n int) int
func (enc *Encoding) Encode(dst, src []byte)
func (enc *Encoding) EncodeToString(src []byte) string
func (enc *Encoding) EncodedLen(n int) int

详解
1、func NewDecoder(enc *Encoding, r io.Reader) io.Reader

参数列表:
enc Encoding 结构指针
w io.Reader 接口
返回值:
io.Reader 接口
功能说明:
返回一个 io.Reader 接口,用于流式解码

代码实例

package main

import (
    "strings"
    "encoding/base64"
    "fmt"
)

func main() {
    // base 64 数据
    src := "dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg=="
    reader := strings.NewReader(src)
    decoder := base64.NewDecoder(base64.StdEncoding, reader)
    // 以流式解码
    buf := make([]byte, 2)
    // 保存解码后的数据
    dst := ""
    for {
        n, err := decoder.Read(buf)
        if n == 0 || err != nil {
            break
        }
        dst += string(buf[:n])
    }
    fmt.Println("解码后的数据为:", dst)
}

2)func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser

参数列表:
enc Encoding  指针结构
w io.Writer 接口
返回值:
io.WriteCloser  接口
功能说明:
返回一个io.WriteCloser 接口,用于流式编码

代码实例

package main

import (
    "os"
    "encoding/base64"
)

func main() {
    src := []byte("this is a test string.")
    encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
    encoder.Write(src)
    encoder.Close()
}

3)func (e CorruptinputError) Error() string

参数列表:无
返回值:错误描述

4)func NewEncoding(encoder string) *Encoding

参数列表:encoder 64字节长的字符串,用做转换表
返回值:Encoding 结构指针
功能说明:计算 base64 解码输出需要的最大字节数

代码实例

package examples

import (
    "fmt"
    "encoding/base64"
)

// 我们的编码表,64 字节
const encodeTest = "----------------------------------------------------------------"

func ExampleNewEncoding1() {

    enc := base64.NewEncoding(encodeTest)

    src := "this is a test string."
    dst := enc.EncodeToString([]byte(src))

    // 最后不足4字节的会用"="补全
    fmt.Println(dst)
    fmt.Println(len(dst) % 4 == 0)
}

5)func (enc *Encoding) Decode(dst, src []byte) (n int, err error)

参数列表:
1)dst  解码缓冲区
2)src  要解码的字符串切片
返回值:
1)n  解码到缓冲区的字节数
2)err  可能的错误
功能说明:对输入的字符串进行 base 64 解码

代码实例

package main

import (
    "encoding/base64"
    "fmt"
    "log"
)

func main() {
    src := []byte("dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg==")
    maxLen := base64.StdEncoding.DecodedLen(len(src))
    dst := make([]byte, maxLen)
    n, err := base64.StdEncoding.Decode(dst, src)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println("解码后的数据为:", string(dst[:n]))
}

6)func (enc *Encoding) DecodeString(s string) ([]byte, error)

参数列表:s  要进行 base64 解码的字符串
返回值:
1)经过 base64 解码后字符串切片
2)可能的错误
功能说明:对传入的字符串进行 base64 解码

参数实例

package main

import (
    "encoding/base64"
    "fmt"
    "log"
)

func main() {
    src := "dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg=="
    dst, err := base64.StdEncoding.DecodeString(src)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println("解码后的数据为:", string(dst))
}

7)func (enc *Encoding) DecodedLen(n int) int

参数列表:n 要进行 base64 解码的字节数
返回值:base64 解码输出需要的最大字节数

代码实例

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    src := []byte("dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg==")
    maxLen := base64.StdEncoding.DecodedLen(len(src))
    fmt.Println("解码后的数据最长长度:", maxLen)
}

8)func (enc *Encoding) Encode(dst, src []byte)

参数列表:
1)dst  编码缓冲区
2)src  要编码的字符串切片
返回值:无
功能说明:对输入的字符串进行base64编码

代码实例

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    src := []byte("this is a test string.")
    maxLen := base64.StdEncoding.EncodedLen(len(src))
    dst := make([]byte, maxLen)
    base64.StdEncoding.Encode(dst, src)
    fmt.Println("编码后的数据为:", string(dst))
}

9)func (enc *Encoding) EncodeToString(src []byte) string

参数列表:src  表示要进行 base64 编码的字符串切片
返回值:经过 base64 编码后的字符串
功能说明:对传入的字符串切片进行 base64 编码

代码实例:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    src := []byte("this is a test string.")
    dst := base64.StdEncoding.EncodeToString(src)
    fmt.Println("编码后的数据:", dst)
}

10)func (enc *Encoding) EncodedLen(n int) int

参数列表:n  要进行 base64 编码的字节数
返回值:经过 base64 编码后的字节数
功能说明:计算编码输出的字节数

代码实例

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    src := []byte("this is a test string.")
    maxLen := base64.StdEncoding.EncodedLen(len(src))
    fmt.Println("编码后的数据长度为:", maxLen)
}

三、编码与解码各有哪几种操作?
编码:
1)方法一:func (enc *Encoding) Encode(dst, src []byte)
2)方法二:func (enc *Encoding) EncodeToString(src []byte) string

解码:
1)方法一:func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
2)方法二:func (enc *Encoding) DecodeString(s string) ([]byte, error)

相关文章

  • golang中encoding/base64包

    go标准库中的base32包与base64包的提供的方法以及使用几乎一至,不同的地方就是就是底层实现,一个是进行b...

  • 006-golang中XML文件的处理

    golang中XML文件的处理 一.概述 在golang中 包"encoding/xml" 提供了对xml文件的...

  • Golang标准库——encoding(1)

    encoding ascii85 asn1 base32 base64 encoding encoding包定义了...

  • golang中encoding/pem包

    1、golang中pem包是什么?2、golang中的pem包为我们开发者提供了哪些功能?3、我们可以用pem包做...

  • golang中encoding/binary包

    1、golang包中的binary包是什么?2、binary为我们开发者提供了哪些内容?以及怎么使用?3、编解码有...

  • golang 读写二进制文件(2)

    golang 使用encoding/gob包读写二进制文件 上篇介绍了使用"encoding/binary"包读写...

  • go使用base64编码

    Go中的系统库中提供了encoding/base64编码/解码的内置支持. encoding/base64提供了四...

  • golang解析json数据

    golang官方包encoding/json包解析json数据太复杂,这里使用简单的json解析包simplejs...

  • golang基础学习-base64使用

    在近期的项目开发中对图片进行base64编码,简单使用了golang的base64包。 1.使用方法 1.1 引入...

  • golang中encoding/base32包

    1、golang中base32包是什么?2、base32给我们开发者提供了什么?以及用法?3、编码与解码各有哪几种...

网友评论

    本文标题:golang中encoding/base64包

    本文链接:https://www.haomeiwen.com/subject/bffehqtx.html