binascii --- 二進(jìn)制和 ASCII 碼互轉(zhuǎn)?
binascii 模塊包含很多在二進(jìn)制和二進(jìn)制表示的各種ASCII碼之間轉(zhuǎn)換的方法。 通常情況不會(huì)直接使用這些函數(shù),而是使用像 uu , base64 ,或 binhex 這樣的封裝模塊。 為了執(zhí)行效率高,binascii 模塊含有許多用 C 寫的低級(jí)函數(shù),這些底層函數(shù)被一些高級(jí)模塊所使用。
注解
a2b_* 函數(shù)接受只含有 ASCII 碼的Unicode 字符串。其他函數(shù)只接受 字節(jié)類對(duì)象 (例如 bytes,bytearray 和其他支持緩沖區(qū)協(xié)議的對(duì)象)。
在 3.3 版更改: ASCII-only unicode strings are now accepted by the a2b_* functions.
binascii 模塊定義了以下函數(shù):
-
binascii.a2b_uu(string)? 將單行 uu 編碼數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)并返回。uu 編碼每行的數(shù)據(jù)通常包含45 個(gè)(二進(jìn)制)字節(jié),最后一行除外。每行數(shù)據(jù)后面可能跟有空格。
-
binascii.b2a_uu(data, *, backtick=False)? 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 ASCII 編碼字符,返回值是轉(zhuǎn)換后的行數(shù)據(jù),包括換行符。 data 的長(zhǎng)度最多為45。如果 backtick 為ture,則零由
'`'而不是空格表示。在 3.7 版更改: 增加 backtick 形參。
-
binascii.a2b_base64(string)? 將 base64 數(shù)據(jù)塊轉(zhuǎn)換成二進(jìn)制并以二進(jìn)制數(shù)據(jù)形式返回。一次可以傳遞多行數(shù)據(jù)。
-
binascii.b2a_base64(data, *, newline=True)? 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為一行用 base64 編碼的ASCII字符串。返回值是轉(zhuǎn)換后的行數(shù)據(jù),如果 newline 為true,則返回值包括換行符。該函數(shù)的輸出符合:rfc:3548。
在 3.6 版更改: 增加 newline 形參。
-
binascii.a2b_qp(data, header=False)? 將一個(gè)引號(hào)可打印的數(shù)據(jù)塊轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)并返回。一次可以轉(zhuǎn)換多行。如果可選參數(shù) header 存在且為true,則數(shù)據(jù)中的下劃線將被解碼成空格。
-
binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)? 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為一行或多行帶引號(hào)可打印編碼的ASCII字符串。返回值是轉(zhuǎn)換后的行數(shù)據(jù)。如果可選參數(shù) quotetabs 存在且為真值,則對(duì)所有制表符和空格進(jìn)行編碼。如果可選參數(shù) istext 存在且為真值,則不對(duì)新行進(jìn)行編碼,但將對(duì)尾隨空格進(jìn)行編碼。如果可選參數(shù) header 存在且為true,則空格將被編碼為下劃線 RFC 1522。如果可選參數(shù) header 存在且為假值,則也會(huì)對(duì)換行符進(jìn)行編碼;不進(jìn)行換行轉(zhuǎn)換編碼可能會(huì)破壞二進(jìn)制數(shù)據(jù)流。
-
binascii.a2b_hqx(string)? 將 binhex4 格式的 ASCII 數(shù)據(jù)不進(jìn)行 RLE 解壓縮直接轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。該字符串應(yīng)包含完整數(shù)量的二進(jìn)制字節(jié),或者(在binhex4 數(shù)據(jù)最后部分)剩余位為零。
-
binascii.rledecode_hqx(data)? 根據(jù) binhex4 標(biāo)準(zhǔn)對(duì)數(shù)據(jù)執(zhí)行 RLE 解壓縮。該算法在一個(gè)字節(jié)的數(shù)據(jù)后使用
0x90作為重復(fù)指示符,然后計(jì)數(shù)。計(jì)數(shù)0指定字節(jié)值0x90。該例程返回解壓縮的數(shù)據(jù),輸入數(shù)據(jù)以孤立的重復(fù)指示符結(jié)束的情況下,將引發(fā)Incomplete異常。在 3.2 版更改: 僅接受 bytestring 或 bytearray 對(duì)象作為輸入。
-
binascii.rlecode_hqx(data)? 在 data 上執(zhí)行 binhex4 游程編碼壓縮并返回結(jié)果。
-
binascii.b2a_hqx(data)? 執(zhí)行 hexbin4 類型二進(jìn)制到 ASCII 碼的轉(zhuǎn)換并返回結(jié)果字符串。輸入數(shù)據(jù)應(yīng)經(jīng)過 RLE 編碼,且數(shù)據(jù)長(zhǎng)度可被3整除(除了最后一個(gè)片段)。
-
binascii.crc_hqx(data, value)? 以 value 作為初始 CRC 計(jì)算 data 的16位 CRC 值,返回其結(jié)果。這里使用 CRC-CCITT 生成多項(xiàng)式 x16 + x12 + x5 + 1 ,通常表示為0x1021。該 CRC 被用于 binhex4 格式。
-
binascii.crc32(data[, value])? 計(jì)算 CRC-32 ,從 value 的初始 CRC 開始計(jì)算 data 的32位校驗(yàn)和。默認(rèn)初始 CRC 為零。該算法與 ZIP 文件校驗(yàn)和一致。由于該算法被設(shè)計(jì)用作校驗(yàn)和算法,因此不適合用作通用散列算法。使用方法如下:
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 版更改: 校驗(yàn)結(jié)果始終是無符號(hào)類型的。要在所有Python版本和平臺(tái)上生成相同的數(shù)值,請(qǐng)使用
crc32(data) & 0xffffffff。
-
binascii.b2a_hex(data)? -
binascii.hexlify(data)? 返回二進(jìn)制數(shù)據(jù) data 的十六進(jìn)制表示形式。 data 的每個(gè)字節(jié)都被轉(zhuǎn)換為相應(yīng)的2位十六進(jìn)制表示形式。因此返回的字節(jié)對(duì)象的長(zhǎng)度是 data 的兩倍。
使用:
bytes.hex()方法也可以方便地實(shí)現(xiàn)相似的功能(但僅返回文本字符串)。
-
binascii.a2b_hex(hexstr)? -
binascii.unhexlify(hexstr)? 返回由十六進(jìn)制字符串 hexstr 表示的二進(jìn)制數(shù)據(jù)。此函數(shù)功能與
b2a_hex()相反。 hexstr 必須包含偶數(shù)個(gè)十六進(jìn)制數(shù)字(可以是大寫或小寫),否則會(huì)引發(fā)Error異常。使用:
bytes.fromhex()類方法也實(shí)現(xiàn)相似的功能(僅接受文本字符串參數(shù),不限制其中的空白字符)。
-
exception
binascii.Error? 通常是因?yàn)榫幊体e(cuò)誤引發(fā)的異常。
-
exception
binascii.Incomplete? 數(shù)據(jù)不完整引發(fā)的異常。通常不是編程錯(cuò)誤導(dǎo)致的,可以通過讀取更多的數(shù)據(jù)并再次嘗試來處理該異常。
