非常教程

Elixir 1.5参考手册

基础 | Base

基础 | 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"
基础 | Base
基础 | Base 详细