binascii
— 二進位制和 ASCII 之間的轉換¶
binascii
模組包含許多在二進位制和各種 ASCII 編碼的二進位制表示之間進行轉換的方法。通常,您不會直接使用這些函式,而是使用像 base64
這樣的包裝模組。 binascii
模組包含用 C 編寫的底層函式,用於提高速度,供更高級別的模組使用。
注意
a2b_*
函式接受僅包含 ASCII 字元的 Unicode 字串。其他函式僅接受類位元組物件(例如 bytes
,bytearray
和其他支援緩衝區協議的物件)。
在 3.3 版本中更改: a2b_*
函式現在接受僅包含 ASCII 的 unicode 字串。
binascii
模組定義了以下函式
- binascii.a2b_uu(string)¶
將單行 uuencoded 資料轉換回二進位制並返回二進位制資料。行通常包含 45 個(二進位制)位元組,最後一行除外。行資料後可以跟空格。
- binascii.b2a_uu(data, *, backtick=False)¶
將二進位制資料轉換為一行 ASCII 字元,返回值是轉換後的行,包括一個換行符。data 的長度最多應為 45。如果 backtick 為 true,則零用
'`'
而不是空格表示。在 3.7 版本中更改: 添加了 backtick 引數。
- binascii.a2b_base64(string, /, *, strict_mode=False)¶
將一個 base64 資料塊轉換回二進位制並返回二進位制資料。可以一次傳遞多行。
如果 strict_mode 為 true,則僅轉換有效的 base64 資料。無效的 base64 資料將引發
binascii.Error
。有效的 base64
符合 RFC 3548。
僅包含 base64 字母表中的字元。
在填充後不包含多餘的資料(包括多餘的填充、換行符等)。
不以填充開頭。
在 3.11 版本中更改: 添加了 strict_mode 引數。
- binascii.b2a_base64(data, *, newline=True)¶
將二進位制資料轉換為一行 base64 編碼的 ASCII 字元。返回值是轉換後的行,如果 newline 為 true,則包括換行符。此函式的輸出符合 RFC 3548。
在 3.6 版本中更改: 添加了 newline 引數。
- binascii.a2b_qp(data, header=False)¶
將一個 quoted-printable 資料塊轉換回二進位制並返回二進位制資料。可以一次傳遞多行。如果可選引數 header 存在且為 true,則下劃線將解碼為空格。
- binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)¶
將二進位制資料轉換為一行或多行 quoted-printable 編碼的 ASCII 字元。返回值是轉換後的行。如果可選引數 quotetabs 存在且為 true,則所有制表符和空格都將被編碼。如果可選引數 istext 存在且為 true,則不會編碼換行符,但會編碼尾隨空格。如果可選引數 header 存在且為 true,則空格將按照 RFC 1522 編碼為下劃線。如果可選引數 header 存在且為 false,則也會編碼換行符;否則,換行符轉換可能會破壞二進位制資料流。
- binascii.crc_hqx(data, value)¶
計算 data 的 16 位 CRC 值,從 value 作為初始 CRC 開始,並返回結果。這使用 CRC-CCITT 多項式 x16 + x12 + x5 + 1,通常表示為 0x1021。此 CRC 用於 binhex4 格式。
- binascii.crc32(data[, value])¶
計算 CRC-32,data 的無符號 32 位校驗和,從 value 的初始 CRC 開始。預設的初始 CRC 為零。該演算法與 ZIP 檔案校驗和一致。由於該演算法被設計為用作校驗和演算法,因此不適合用作通用雜湊演算法。使用方法如下
print(binascii.crc32(b"hello world")) # Or, in two pieces: crc = binascii.crc32(b"hello") crc = binascii.crc32(b" world", crc) print('crc32 = {:#010x}'.format(crc))
在 3.0 版本中更改: 結果始終為無符號的。
- binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])¶
- binascii.hexlify(data[, sep[, bytes_per_sep=1]])¶
返回二進位制 data 的十六進位制表示。data 的每個位元組都轉換為相應的 2 位十六進位制表示。因此,返回的位元組物件是 data 長度的兩倍。
使用
bytes.hex()
方法也可以方便地訪問類似的功能(但返回文字字串)。如果指定了 sep,它必須是單個字元的 str 或 bytes 物件。它將在每 bytes_per_sep 個輸入位元組之後插入到輸出中。預設情況下,分隔符的位置是從輸出的右端開始計數的,如果您希望從左端計數,請提供一個負的 bytes_per_sep 值。
>>> import binascii >>> binascii.b2a_hex(b'\xb9\x01\xef') b'b901ef' >>> binascii.hexlify(b'\xb9\x01\xef', '-') b'b9-01-ef' >>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2) b'b9_01ef' >>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2) b'b901 ef'
在 3.8 版本中更改: 添加了 sep 和 bytes_per_sep 引數。
- binascii.a2b_hex(hexstr)¶
- binascii.unhexlify(hexstr)¶
返回由十六進位制字串 hexstr 表示的二進位制資料。此函式是
b2a_hex()
的逆運算。hexstr 必須包含偶數個十六進位制數字(可以是大小寫),否則將引發Error
異常。使用
bytes.fromhex()
類方法也可以訪問類似的功能(只接受文字字串引數,但對空格更寬鬆)。
- exception binascii.Error¶
發生錯誤時引發的異常。 這些通常是程式設計錯誤。
- exception binascii.Incomplete¶
資料不完整時引發的異常。 這些通常不是程式設計錯誤,但可以透過讀取更多資料並重試來處理。