Пакет base32
Обзор
Пакет base32 реализует кодирование base32, определённое в RFC 4648.
Указатель
Файлы пакета
base32.go
Константы
const (
StdPadding rune = '=' // Standard padding character
NoPadding rune = -1 // No padding
) Переменные
HexEncoding — это «расширенный шестнадцатеричный алфавит», определённый в RFC 4648. Обычно он используется в DNS.
var HexEncoding = NewEncoding("0123456789ABCDEFGHIJKLMNOPQRSTUV") StdEncoding — стандартная кодировка base32, определённая в RFC 4648.
var StdEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567") func NewDecoder
func NewDecoder(enc *Encoding, r io.Reader) io.Reader
NewDecoder создаёт новый потоковый декодер base32.
func NewEncoder
func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
NewEncoder возвращает новый потоковый кодировщик base32. Данные, записанные в возвращённый объект writer, будут закодированы с помощью enc, а затем записаны в w. Кодировки base32 обрабатывают блоки по 5 байт; после завершения записи вызывающий код должен закрыть возвращённый кодировщик с помощью Close, чтобы сбросить все частично записанные блоки.
Пример
Код:
input := []byte("foo\x00bar")
encoder := base32.NewEncoder(base32.StdEncoding, os.Stdout)
encoder.Write(input)
// Must close the encoder when finished to flush any partial blocks.
// If you comment out the following line, the last partial block "r"
// won't be encoded.
encoder.Close()
Вывод:
MZXW6ADCMFZA====
type CorruptInputError
type CorruptInputError int64
func (CorruptInputError) Error
func (e CorruptInputError) Error() string
type Encoding
Encoding — это схема кодирования и декодирования с основанием 32, определяемая алфавитом из 32 символов. Наиболее распространённая — кодировка «base32», введённая для SASL GSSAPI и стандартизированная в RFC 4648. Альтернативная кодировка «base32hex» используется в DNSSEC.
type Encoding struct {
// contains filtered or unexported fields
}
func NewEncoding
func NewEncoding(encoder string) *Encoding
NewEncoding возвращает новую кодировку с дополнением, заданную указанным алфавитом. Алфавит должен быть строкой из 32 байт, содержащей уникальные значения байтов и не содержащей символ дополнения или CR / LF ('\r', '\n'). Алфавит рассматривается как последовательность значений байтов без специальной обработки многобайтовой кодировки UTF-8. Полученная кодировка использует символ дополнения по умолчанию ('='), который можно изменить или отключить с помощью Encoding.WithPadding.
func (*Encoding) AppendDecode 1.22
func (enc *Encoding) AppendDecode(dst, src []byte) ([]byte, error)
AppendDecode добавляет декодированные данные src в кодировке base32 к dst и возвращает расширенный буфер. Если входные данные имеют неверный формат, функция возвращает частично декодированные данные src и ошибку. Символы новой строки (\r и \n) игнорируются.
func (*Encoding) AppendEncode 1.22
func (enc *Encoding) AppendEncode(dst, src []byte) []byte
AppendEncode добавляет закодированные данные src в кодировке base32 к dst и возвращает расширенный буфер.
func (*Encoding) Decode
func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
Decode декодирует src с помощью кодировки enc. Функция записывает в dst не более Encoding.DecodedLen(len(src)) байт и возвращает количество записанных байт. Вызывающий код должен обеспечить достаточный размер dst для всех декодированных данных. Если src содержит недопустимые данные base32, функция вернёт количество успешно записанных байт и CorruptInputError. Символы новой строки (\r и \n) игнорируются.
Пример
Код:
str := "JBSWY3DPFQQHO33SNRSCC==="
dst := make([]byte, base32.StdEncoding.DecodedLen(len(str)))
n, err := base32.StdEncoding.Decode(dst, []byte(str))
if err != nil {
fmt.Println("decode error:", err)
return
}
dst = dst[:n]
fmt.Printf("%q\n", dst)
Вывод:
"Hello, world!"
func (*Encoding) DecodeString
func (enc *Encoding) DecodeString(s string) ([]byte, error)
DecodeString возвращает байты, представленные строкой base32 s. Если входные данные имеют неверный формат, функция возвращает частично декодированные данные и CorruptInputError. Символы новой строки (\r и \n) игнорируются.
Пример
Код:
str := "ONXW2ZJAMRQXIYJAO5UXI2BAAAQGC3TEEDX3XPY="
data, err := base32.StdEncoding.DecodeString(str)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Printf("%q\n", data)
Вывод:
"some data with \x00 and \ufeff"
func (*Encoding) DecodedLen
func (enc *Encoding) DecodedLen(n int) int
DecodedLen возвращает максимальную длину в байтах декодированных данных, соответствующих n байтам данных, закодированных в base32.
func (*Encoding) Encode
func (enc *Encoding) Encode(dst, src []byte)
Encode кодирует src с помощью кодировки enc, записывая в dst Encoding.EncodedLen(len(src)) байт.
Кодировка дополняет выходные данные до длины, кратной 8 байтам, поэтому Encode не подходит для использования с отдельными блоками большого потока данных. Вместо этого используйте NewEncoder.
Пример
Код:
data := []byte("Hello, world!")
dst := make([]byte, base32.StdEncoding.EncodedLen(len(data)))
base32.StdEncoding.Encode(dst, data)
fmt.Println(string(dst))
Вывод:
JBSWY3DPFQQHO33SNRSCC===
func (*Encoding) EncodeToString
func (enc *Encoding) EncodeToString(src []byte) string
EncodeToString возвращает кодировку base32 для src.
Пример
Код:
data := []byte("any + old & data")
str := base32.StdEncoding.EncodeToString(data)
fmt.Println(str)
Вывод:
MFXHSIBLEBXWYZBAEYQGIYLUME======
func (*Encoding) EncodedLen
func (enc *Encoding) EncodedLen(n int) int
EncodedLen возвращает длину в байтах кодировки base32 для входного буфера длиной n.
func (Encoding) WithPadding 1.9
func (enc Encoding) WithPadding(padding rune) *Encoding
WithPadding создает новое кодирование, идентичное enc, но с указанным символом заполнения, или отключает заполнение с помощью NoPadding. Символ заполнения не должен быть '\r' или '\n', не должен содержаться в алфавите кодирования, не должен быть отрицательным и должен быть rune со значением не выше '\xff'. Символы заполнения со значениями выше '\x7f' кодируются как соответствующие им значения байтов, а не с использованием представления кодовой точки в UTF-8.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/encoding/base32/