檢視原始碼 基礎 (Elixir v1.16.2)
此模組提供資料編碼和解碼函式,依循 RFC 4648。
此文件定義常用的 16 進位、32 進位和 64 進位編碼範例。
16 進位字母
值 | 編碼 | 值 | 編碼 | 值 | 編碼 | 值 | 編碼 |
---|---|---|---|---|---|---|---|
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 進位字母
值 | 編碼 | 值 | 編碼 | 值 | 編碼 | 值 | 編碼 |
---|---|---|---|---|---|---|---|
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 | (填充) | = |
7 | H | 16 | Q | 25 | Z | ||
8 | I | 17 | R | 26 | 2 |
32 進位(延伸十六進位)字母
值 | 編碼 | 值 | 編碼 | 值 | 編碼 | 值 | 編碼 |
---|---|---|---|---|---|---|---|
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 | (填充) | = |
7 | 7 | 16 | G | 25 | P | ||
8 | 8 | 17 | H | 26 | Q |
64 進位字母
值 | 編碼 | 值 | 編碼 | 值 | 編碼 | 值 | 編碼 |
---|---|---|---|---|---|---|---|
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 | (填充) | = |
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
64 進位(URL 和檔名安全)字母
值 | 編碼 | 值 | 編碼 | 值 | 編碼 | 值 | 編碼 |
---|---|---|---|---|---|---|---|
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 | (填充) | = |
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
摘要
函數
將 base 16 編碼的字串解碼成二進制字串。
將 base 16 編碼的字串解碼成二進制字串。
將 base 32 編碼的字串解碼成二進制字串。
將 base 32 編碼的字串解碼成二進制字串。
將 base 64 編碼的字串解碼成二進制字串。
將 base 64 編碼的字串解碼成二進制字串。
將二進制字串編碼成 base 16 編碼的字串。
將二進制字串編碼成 base 32 編碼的字串。
將二進制字串編碼成 base 64 編碼的字串。
將使用延伸十六進制字母表的 base 32 編碼的字串解碼成二進制字串。
將使用延伸十六進制字母表的 base 32 編碼的字串解碼成二進制字串。
將二進制字串編碼成使用延伸十六進制字母表的 base 32 編碼的字串。
將使用 URL 和檔名安全字母表的 base 64 編碼的字串解碼成二進制字串。
將使用 URL 和檔名安全字母表的 base 64 編碼的字串解碼成二進制字串。
將二進制字串編碼成使用 URL 和檔名安全字母表的 base 64 編碼的字串。
類型
函數
@spec decode16(binary(), [{:case, decode_case()}]) :: {:ok, binary()} | :error
將 base 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"}
@spec decode16!(binary(), [{:case, decode_case()}]) :: binary()
將 base 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"
@spec decode32(binary(), case: decode_case(), padding: boolean()) :: {:ok, binary()} | :error
將 base 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"}
@spec decode32!(binary(), case: decode_case(), padding: boolean()) :: binary()
將 base 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"
將 base 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"}
將 base 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"
@spec encode16(binary(), [{:case, encode_case()}]) :: binary()
將二進制字串編碼成 base 16 編碼的字串。
選項
可接受的選項為
:case
- 指定編碼時要使用的字元大小寫
:case
的值可以為
:upper
- 使用大寫字元(預設):lower
- 使用小寫字元
範例
iex> Base.encode16("foobar")
"666F6F626172"
iex> Base.encode16("foobar", case: :lower)
"666f6f626172"
@spec encode32(binary(), case: encode_case(), padding: boolean()) :: binary()
將二進制字串編碼成 base 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"
將二進制字串編碼成 base 64 編碼的字串。
接受 padding: false
選項,它會從輸出字串中省略填充。
範例
iex> Base.encode64("foobar")
"Zm9vYmFy"
iex> Base.encode64("foob")
"Zm9vYg=="
iex> Base.encode64("foob", padding: false)
"Zm9vYg"
@spec hex_decode32(binary(), case: decode_case(), padding: boolean()) :: {:ok, binary()} | :error
將使用延伸十六進制字母表的 base 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"}
@spec hex_decode32!(binary(), case: decode_case(), padding: boolean()) :: binary()
將使用延伸十六進制字母表的 base 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"
@spec hex_encode32(binary(), case: encode_case(), padding: boolean()) :: binary()
將二進制字串編碼成使用延伸十六進制字母表的 base 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 和檔名安全字母表的 base 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 和檔名安全字母表的 base 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 和檔名安全字母表的 base 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"