python3從零學習-5.7.3、binascii—二進制和 ASCII 碼互轉

binascii 模塊包含很多在二進制和二進制表示的各種ASCII碼之間轉換的方法。 通常情況不會直接使用這些函數,而是使用像 uu , base64 ,或 binhex 這樣的封裝模塊。 爲了執行效率高,binascii 模塊含有許多用 C 寫的低級函數,這些底層函數被一些高級模塊所使用。

binascii 模塊定義了以下函數:

  • binascii.a2b_uu(string)

將單行 uu 編碼數據轉換成二進制數據並返回。uu 編碼每行的數據通常包含45 個(二進制)字節,最後一行除外。每行數據後面可能跟有空格。

 

  • binascii.b2a_uu(data)

Convert binary data to a line of ASCII characters, the return value is the converted line, including a newline char. The length of data should be at most 45.

 

  • binascii.a2b_base64(string)

將 base64 數據塊轉換成二進制並以二進制數據形式返回。一次可以傳遞多行數據。

 

  • binascii.b2a_base64(data, *, newline=True)

將二進制數據轉換爲一行用 base64 編碼的ASCII字符串。返回值是轉換後的行數據,如果 newline 爲true,則返回值包括換行符。該函數的輸出符合:rfc:3548。

 

在 3.6 版更改: 增加 newline 形參。

 

  • binascii.a2b_qp(data, header=False)

將一個引號可打印的數據塊轉換成二進制數據並返回。一次可以轉換多行。如果可選參數 header 存在且爲true,則數據中的下劃線將被解碼成空格。

 

  • binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)

將二進制數據轉換爲一行或多行帶引號可打印編碼的ASCII字符串。返回值是轉換後的行數據。如果可選參數 quotetabs 存在且爲真值,則對所有制表符和空格進行編碼。如果可選參數 istext 存在且爲真值,則不對新行進行編碼,但將對尾隨空格進行編碼。如果可選參數 header 存在且爲true,則空格將被編碼爲下劃線 RFC 1522。如果可選參數 header 存在且爲假值,則也會對換行符進行編碼;不進行換行轉換編碼可能會破壞二進制數據流。

 

  • binascii.a2b_hqx(string)

將 binhex4 格式的 ASCII 數據不進行 RLE 解壓縮直接轉換爲二進制數據。該字符串應包含完整數量的二進制字節,或者(在binhex4 數據最後部分)剩餘位爲零。

  • binascii.rledecode_hqx(data)

根據 binhex4 標準對數據執行 RLE 解壓縮。該算法在一個字節的數據後使用 0x90 作爲重複指示符,然後計數。計數 0 指定字節值 0x90 。該例程返回解壓縮的數據,輸入數據以孤立的重複指示符結束的情況下,將引發 Incomplete 異常。

 

在 3.2 版更改: 僅接受 bytestring 或 bytearray 對象作爲輸入。

 

  • binascii.rlecode_hqx(data)

在 data 上執行 binhex4 遊程編碼壓縮並返回結果。

 

  • binascii.b2a_hqx(data)

執行 hexbin4 類型二進制到 ASCII 碼的轉換並返回結果字符串。輸入數據應經過 RLE 編碼,且數據長度可被3整除(除了最後一個片段)。

 

  • binascii.crc_hqx(data, value)

以 value 作爲初始 CRC 計算 data 的16位 CRC 值,返回其結果。這裏使用 CRC-CCITT 生成多項式 x16 + x12 + x5 + 1 ,通常表示爲0x1021。該 CRC 被用於 binhex4 格式。

 

  • binascii.crc32(data[, value])

計算 CRC-32 ,從 value 的初始 CRC 開始計算 data 的32位校驗和。默認初始 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 版更改: 校驗結果始終是無符號類型的。要在所有Python版本和平臺上生成相同的數值,請使用 crc32(data) & 0xffffffff 。

 

  • binascii.b2a_hex(data)
  • binascii.hexlify(data)

返回二進制數據 data 的十六進制表示形式。 data 的每個字節都被轉換爲相應的2位十六進制表示形式。因此返回的字節對象的長度是 data 的兩倍。

 

  • binascii.a2b_hex(hexstr)
  • binascii.unhexlify(hexstr)

返回由十六進制字符串 hexstr 表示的二進制數據。此函數功能與 b2a_hex() 相反。 hexstr 必須包含偶數個十六進制數字(可以是大寫或小寫),否則會引發 Error 異常。

  • exception binascii.Error

通常是因爲編程錯誤引發的異常。

 

  • exception binascii.Incomplete

數據不完整引發的異常。通常不是編程錯誤導致的,可以通過讀取更多的數據並再次嘗試來處理該異常。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章