基础 | Base
底座
该模块根据RFC 4648提供数据编码和解码功能。
本文档定义了常用的基本16,基本32和基本64编码方案。
基16字母表
| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
| 0| 0| 4| 4| 8| 8| 12| C|
| 1| 1| 5| 5| 9| 9| 13| D|
| 2| 2| 6| 6| 10| A| 14| E|
| 3| 3| 7| 7| 11| B| 15| F|
基32字母表
| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
| 0| A| 9| J| 18| S| 27| 3|
| 1| B| 10| K| 19| T| 28| 4|
| 2| C| 11| L| 20| U| 29| 5|
| 3| D| 12| M| 21| V| 30| 6|
| 4| E| 13| N| 22| W| 31| 7|
| 5| F| 14| O| 23| X| | |
| 6| G| 15| P| 24| Y| (pad)| =|
| 7| H| 16| Q| 25| Z| | |
| 8| I| 17| R| 26| 2| | |
基地32(扩展的十六进制)字母表
| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
| 0| 0| 9| 9| 18| I| 27| R|
| 1| 1| 10| A| 19| J| 28| S|
| 2| 2| 11| B| 20| K| 29| T|
| 3| 3| 12| C| 21| L| 30| U|
| 4| 4| 13| D| 22| M| 31| V|
| 5| 5| 14| E| 23| N| | |
| 6| 6| 15| F| 24| O| (pad)| =|
| 7| 7| 16| G| 25| P| | |
| 8| 8| 17| H| 26| Q| | |
64基字母表
| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
| 0| A| 17| R| 34| i| 51| z|
| 1| B| 18| S| 35| j| 52| 0|
| 2| C| 19| T| 36| k| 53| 1|
| 3| D| 20| U| 37| l| 54| 2|
| 4| E| 21| V| 38| m| 55| 3|
| 5| F| 22| W| 39| n| 56| 4|
| 6| G| 23| X| 40| o| 57| 5|
| 7| H| 24| Y| 41| p| 58| 6|
| 8| I| 25| Z| 42| q| 59| 7|
| 9| J| 26| a| 43| r| 60| 8|
| 10| K| 27| b| 44| s| 61| 9|
| 11| L| 28| c| 45| t| 62| +|
| 12| M| 29| d| 46| u| 63| /|
| 13| N| 30| e| 47| v| | |
| 14| O| 31| f| 48| w| (pad)| =|
| 15| P| 32| g| 49| x| | |
| 16| Q| 33| h| 50| y| | |
基地64(URL和文件名安全)字母表
| Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
|------:|---------:|------:|---------:|------:|---------:|------:|---------:|
| 0| A| 17| R| 34| i| 51| z|
| 1| B| 18| S| 35| j| 52| 0|
| 2| C| 19| T| 36| k| 53| 1|
| 3| D| 20| U| 37| l| 54| 2|
| 4| E| 21| V| 38| m| 55| 3|
| 5| F| 22| W| 39| n| 56| 4|
| 6| G| 23| X| 40| o| 57| 5|
| 7| H| 24| Y| 41| p| 58| 6|
| 8| I| 25| Z| 42| q| 59| 7|
| 9| J| 26| a| 43| r| 60| 8|
| 10| K| 27| b| 44| s| 61| 9|
| 11| L| 28| c| 45| t| 62| -|
| 12| M| 29| d| 46| u| 63| _|
| 13| N| 30| e| 47| v| | |
| 14| O| 31| f| 48| w| (pad)| =|
| 15| P| 32| g| 49| x| | |
| 16| Q| 33| h| 50| y| | |
摘要
函数
decode16(string, opts \ [])
将基16编码的字符串解码为二进制字符串。
decode16!(string, opts \ [])
将基16编码的字符串解码为二进制字符串。
decode32(string, opts \ [])
将基32编码字符串解码为二进制字符串。
decode32!(string, opts \ [])
将基32编码字符串解码为二进制字符串。
decode64(string, opts \ [])
将基64编码字符串解码为二进制字符串。
decode64!(string, opts \ [])
将基64编码字符串解码为二进制字符串。
encode16(data, opts \ [])
将二进制字符串编码为基16编码字符串。
encode32(data, opts \ [])
将二进制字符串编码为基32编码字符串。
encode64(data, opts \ [])
将二进制字符串编码为基64编码字符串。
hex_decode32(string, opts \ [])
用扩展十六进制字母表将32基编码字符串解码为二进制字符串。
hex_decode32!(string, opts \ [])
用扩展十六进制字母表将32基编码字符串解码为二进制字符串。
hex_encode32(data, opts \ [])
将二进制字符串编码为基32编码字符串,并使用扩展的十六进制字母表。
url_decode64(string, opts \ [])
用URL和文件名安全字母表将基64编码的字符串解码为二进制字符串
url_decode64!(string, opts \ [])
用URL和文件名安全字母表将基64编码的字符串解码为二进制字符串
url_encode64(data, opts \ [])
将二进制字符串编码为带有URL和文件名安全字母表的基64编码字符串
函数
decode16(string, opts \ [])
decode16(binary, keyword) :: {:ok, binary} | :error
将基16编码的字符串解码为二进制字符串。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写的值:case
可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
实例
iex> Base.decode16("666F6F626172")
{:ok, "foobar"}
iex> Base.decode16("666f6f626172", case: :lower)
{:ok, "foobar"}
iex> Base.decode16("666f6F626172", case: :mixed)
{:ok, "foobar"}
decode16!(string, opts \ [])
decode16!(binary, keyword) :: binary
将基16编码的字符串解码为二进制字符串。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写的值:case
可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
一个ArgumentError
如果填充是不正确或非字母表字符存在于串中引发异常。
实例
iex> Base.decode16!("666F6F626172")
"foobar"
iex> Base.decode16!("666f6f626172", case: :lower)
"foobar"
iex> Base.decode16!("666f6F626172", case: :mixed)
"foobar"
decode32(string, opts \ [])
decode32(binary, keyword) :: {:ok, binary} | :error
将基32编码字符串解码为二进制字符串。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写
:padding
-指定是否需要填充
:case
值可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
:padding
的值可以是:
true
- 要求输入字符串填充到8的最接近倍数(默认值)
false
-忽略输入字符串中的填充
实例
iex> Base.decode32("MZXW6YTBOI======")
{:ok, "foobar"}
iex> Base.decode32("mzxw6ytboi======", case: :lower)
{:ok, "foobar"}
iex> Base.decode32("mzXW6ytBOi======", case: :mixed)
{:ok, "foobar"}
iex> Base.decode32("MZXW6YTBOI", padding: false)
{:ok, "foobar"}
decode32!(string,opts \ [])
decode32!(binary, keyword) :: binary
将基32编码字符串解码为二进制字符串。
一个ArgumentError
如果填充是不正确或非字母表字符存在于串中引发异常。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写
:padding
-指定是否需要填充
:case
的值可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
:padding
的值可以是:
true
- 要求输入字符串填充到8的最接近倍数(默认值)
false
-忽略输入字符串中的填充
实例
iex> Base.decode32!("MZXW6YTBOI======")
"foobar"
iex> Base.decode32!("mzxw6ytboi======", case: :lower)
"foobar"
iex> Base.decode32!("mzXW6ytBOi======", case: :mixed)
"foobar"
iex> Base.decode32!("MZXW6YTBOI", padding: false)
"foobar"
decode64(string,opts \ [])
decode64(binary, keyword) :: {:ok, binary} | :error
将基64编码字符串解码为二进制字符串。
接受ignore: :whitespace
将忽略输入字符串中所有空白字符的选项。
接受padding: false
将忽略来自输入字符串的填充的选项。
实例
iex> Base.decode64("Zm9vYmFy")
{:ok, "foobar"}
iex> Base.decode64("Zm9vYmFy\n", ignore: :whitespace)
{:ok, "foobar"}
iex> Base.decode64("Zm9vYg==")
{:ok, "foob"}
iex> Base.decode64("Zm9vYg", padding: false)
{:ok, "foob"}
decode64!(string,opts \ [])
decode64!(binary, keyword) :: binary
将基64编码字符串解码为二进制字符串。
接受ignore: :whitespace
将忽略输入字符串中所有空白字符的选项。
接受padding: false
将忽略来自输入字符串的填充的选项。
一个ArgumentError
如果填充是不正确或非字母表字符存在于串中引发异常。
实例
iex> Base.decode64!("Zm9vYmFy")
"foobar"
iex> Base.decode64!("Zm9vYmFy\n", ignore: :whitespace)
"foobar"
iex> Base.decode64!("Zm9vYg==")
"foob"
iex> Base.decode64!("Zm9vYg", padding: false)
"foob"
encode16(data,opts \ [])
encode16(binary, keyword) :: binary
将二进制字符串编码为基16编码字符串。
备选方案
已接受的备选方案如下:
:case
- 指定编码时要使用的字符大小写。值:case
可以是:
:upper
- 使用大写字符(默认)
:lower
-使用小写字符
实例
iex> Base.encode16("foobar")
"666F6F626172"
iex> Base.encode16("foobar", case: :lower)
"666f6f626172"
encode32(data,opts \ [])
encode32(binary, keyword) :: binary
将二进制字符串编码为基32编码字符串。
备选方案
已接受的备选方案如下:
:case
-指定编码时要使用的字符大小写
:padding
-指定是否应用填充
:case
值可以是:
:upper
- 使用大写字符(默认)
:lower
-使用小写字符
:padding
的值可以是:
true
- 将输出字符串填充到8的最接近倍数(默认值)
false
-从输出字符串中省略填充
实例
iex> Base.encode32("foobar")
"MZXW6YTBOI======"
iex> Base.encode32("foobar", case: :lower)
"mzxw6ytboi======"
iex> Base.encode32("foobar", padding: false)
"MZXW6YTBOI"
encode64(data,opts \ [])
encode64(binary, keyword) :: binary
将二进制字符串编码为基本64编码的字符串。
接受padding: false
将从输出字符串中省略填充的选项。
实例
iex> Base.encode64("foobar")
"Zm9vYmFy"
iex> Base.encode64("foob")
"Zm9vYg=="
iex> Base.encode64("foob", padding: false)
"Zm9vYg"
hex_decode32(string,opts \ [])
hex_decode32(binary, keyword) :: {:ok, binary} | :error
将具有扩展十六进制字母表的基32编码字符串解码为二进制字符串。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写
:padding
-指定是否需要填充
:case
的值可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
:padding
的值可以是:
true
- 要求输入字符串填充到8的最接近倍数(默认值)
false
-忽略输入字符串中的填充
实例
iex> Base.hex_decode32("CPNMUOJ1E8======")
{:ok, "foobar"}
iex> Base.hex_decode32("cpnmuoj1e8======", case: :lower)
{:ok, "foobar"}
iex> Base.hex_decode32("cpnMuOJ1E8======", case: :mixed)
{:ok, "foobar"}
iex> Base.hex_decode32("CPNMUOJ1E8", padding: false)
{:ok, "foobar"}
hex_decode32!(string,opts \ [])
hex_decode32!(binary, keyword) :: binary
将具有扩展十六进制字母表的基32编码字符串解码为二进制字符串。
一个ArgumentError
如果填充是不正确或非字母表字符存在于串中引发异常。
备选方案
已接受的备选方案如下:
:case
-指定解码时要接受的字符大小写
:padding
-指定是否需要填充
:case
的值可以是:
:upper
- 只允许大写字符(默认)
:lower
-只允许小写字符
:mixed
-允许混合字符
:padding
的值可以是:
true
- 要求输入字符串填充到8的最接近倍数(默认值)
false
-忽略输入字符串中的填充
实例
iex> Base.hex_decode32!("CPNMUOJ1E8======")
"foobar"
iex> Base.hex_decode32!("cpnmuoj1e8======", case: :lower)
"foobar"
iex> Base.hex_decode32!("cpnMuOJ1E8======", case: :mixed)
"foobar"
iex> Base.hex_decode32!("CPNMUOJ1E8", padding: false)
"foobar"
hex_encode32(data, opts \ [])
hex_encode32(binary, keyword) :: binary
用扩展的十六进制字母将二进制字符串编码为基32编码字符串。
备选方案
已接受的备选方案如下:
:case
-指定编码时要使用的字符大小写
:padding
-指定是否应用填充
:case
的值可以是:
:upper
- 使用大写字符(默认)
:lower
-使用小写字符
:padding
的值可以是:
true
- 将输出字符串填充到8的最接近倍数(默认值)
false
-从输出字符串中省略填充
实例
iex> Base.hex_encode32("foobar")
"CPNMUOJ1E8======"
iex> Base.hex_encode32("foobar", case: :lower)
"cpnmuoj1e8======"
iex> Base.hex_encode32("foobar", padding: false)
"CPNMUOJ1E8"
url_decode64(string,opts \ [])
url_decode64(binary, keyword) :: {:ok, binary} | :error
用URL和文件名安全字母表将64基编码字符串解码为二进制字符串。
接受ignore: :whitespace
选项,它将忽略输入字符串中的所有空白字符。
接受padding: false
选项,它将忽略输入字符串中的填充。
实例
iex> Base.url_decode64("_3_-_A==")
{:ok, <<255, 127, 254, 252>>}
iex> Base.url_decode64("_3_-_A==\n", ignore: :whitespace)
{:ok, <<255, 127, 254, 252>>}
iex> Base.url_decode64("_3_-_A", padding: false)
{:ok, <<255, 127, 254, 252>>}
url_decode64!(string,opts \ [])
url_decode64!(binary, keyword) :: binary
用URL和文件名安全字母表将64基编码字符串解码为二进制字符串。
接受ignore: :whitespace
选项,它将忽略输入字符串中的所有空白字符。
接受padding: false
选项,它将忽略输入字符串中的填充。
一个ArgumentError
如果填充是不正确或非字母表字符存在于串中引发异常。
实例
iex> Base.url_decode64!("_3_-_A==")
<<255, 127, 254, 252>>
iex> Base.url_decode64!("_3_-_A==\n", ignore: :whitespace)
<<255, 127, 254, 252>>
iex> Base.url_decode64!("_3_-_A", padding: false)
<<255, 127, 254, 252>>
url_encode64(data,opts \ [])
url_encode64(binary, keyword) :: binary
将二进制字符串编码为具有URL和文件名安全字母表的基64编码字符串。
接受padding: false
选项,该选项将从输出字符串中省略填充。
实例
iex> Base.url_encode64(<<255, 127, 254, 252>>)
"_3_-_A=="
iex> Base.url_encode64(<<255, 127, 254, 252>>, padding: false)
"_3_-_A"