binascii
--- 在二進位制和 ASCII 之間轉換¶
Thebinascii
module contains a number of methods to convert betweenbinary and various ASCII-encoded binary representations. Normally, you will notuse these functions directly but use wrapper modules likebase64
instead. Thebinascii
module containslow-level functions written in C for greater speed that are used by thehigher-level modules.
備註
a2b_*
functions accept Unicode strings containing only ASCII characters.Other functions only acceptbytes-like objects (such asbytes
,bytearray
and other objects that support the bufferprotocol).
在 3.3 版的變更:ASCII-only unicode strings are now accepted by thea2b_*
functions.
Thebinascii
module defines the following functions:
- binascii.a2b_uu(string)¶
Convert a single line of uuencoded data back to binary and return the binarydata. Lines normally contain 45 (binary) bytes, except for the last line. Linedata may be followed by whitespace.
- binascii.b2a_uu(data,*,backtick=False)¶
Convert binary data to a line of ASCII characters, the return value is theconverted line, including a newline char. The length ofdata should be at most45. Ifbacktick is true, zeros are represented by
'`'
instead of spaces.在 3.7 版的變更:新增backtick 參數。
- binascii.a2b_base64(string,/,*,strict_mode=False)¶
Convert a block of base64 data back to binary and return the binary data. Morethan one line may be passed at a time.
Ifstrict_mode is true, only valid base64 data will be converted. Invalid base64data will raise
binascii.Error
.Valid base64:
Conforms toRFC 3548.
Contains only characters from the base64 alphabet.
Contains no excess data after padding (including excess padding, newlines, etc.).
Does not start with a padding.
在 3.11 版的變更:新增strict_mode 參數。
- binascii.b2a_base64(data,*,newline=True)¶
Convert binary data to a line of ASCII characters in base64 coding. The returnvalue is the converted line, including a newline char ifnewline istrue. The output of this function conforms toRFC 3548.
在 3.6 版的變更:新增newline 參數。
- binascii.a2b_qp(data,header=False)¶
Convert a block of quoted-printable data back to binary and return the binarydata. More than one line may be passed at a time. If the optional argumentheader is present and true, underscores will be decoded as spaces.
- binascii.b2a_qp(data,quotetabs=False,istext=True,header=False)¶
Convert binary data to a line(s) of ASCII characters in quoted-printableencoding. The return value is the converted line(s). If the optional argumentquotetabs is present and true, all tabs and spaces will be encoded. If theoptional argumentistext is present and true, newlines are not encoded buttrailing whitespace will be encoded. If the optional argumentheader ispresent and true, spaces will be encoded as underscores perRFC 1522. If theoptional argumentheader is present and false, newline characters will beencoded as well; otherwise linefeed conversion might corrupt the binary datastream.
- binascii.crc_hqx(data,value)¶
Compute a 16-bit CRC value ofdata, starting withvalue as theinitial CRC, and return the result. This uses the CRC-CCITT polynomialx16 +x12 +x5 + 1, often represented as0x1021. This CRC is used in the binhex4 format.
- binascii.crc32(data[,value])¶
Compute CRC-32, the unsigned 32-bit checksum ofdata, starting with aninitial CRC ofvalue. The default initial CRC is zero. The algorithmis consistent with the ZIP file checksum. Since the algorithm is designed foruse as a checksum algorithm, it is not suitable for use as a general hashalgorithm. Use as follows:
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 版的變更:The result is always unsigned.
- binascii.b2a_hex(data[,sep[,bytes_per_sep=1]])¶
- binascii.hexlify(data[,sep[,bytes_per_sep=1]])¶
Return the hexadecimal representation of the binarydata. Every byte ofdata is converted into the corresponding 2-digit hex representation. Thereturned bytes object is therefore twice as long as the length ofdata.
Similar functionality (but returning a text string) is also convenientlyaccessible using the
bytes.hex()
method.Ifsep is specified, it must be a single character str or bytes object.It will be inserted in the output after everybytes_per_sep input bytes.Separator placement is counted from the right end of the output by default,if you wish to count from the left, supply a negativebytes_per_sep value.
>>>importbinascii>>>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)¶
Return the binary data represented by the hexadecimal stringhexstr. Thisfunction is the inverse of
b2a_hex()
.hexstr must contain an even numberof hexadecimal digits (which can be upper or lower case), otherwise anError
exception is raised.Similar functionality (accepting only text string arguments, but moreliberal towards whitespace) is also accessible using the
bytes.fromhex()
class method.
- exceptionbinascii.Error¶
Exception raised on errors. These are usually programming errors.
- exceptionbinascii.Incomplete¶
Exception raised on incomplete data. These are usually not programming errors,but may be handled by reading a little more data and trying again.