本篇文章主要介绍binascii.
a2b_hex
() / binascii.
unhexlify
()和
binascii.
b2a_hex
() / binascii.
hexlify
()的使用。之所以在会用到这个模块是因为在做Scoket通信是需要发送数据给服务器,协议内容是以十六进制表示的,但是在用send()直接发送改数据时会提示,发送的数据必须要为字节类而不能为一个int型。所以就需要将协议内容转换为字节类。
第一部分:
binascii.
a2b_hex
() / binascii.
unhexlify
()的官方介绍,如下图:
binascii.
a2b_hex
(hexstr) / binascii.
unhexlify
(hexstr),hexstr可以为16进制的 bytes 类型,也可以为十六进制 str 类型,应用实例如下:
import binascii
fth = b'46494E530000000C00000000000000000000006B' # 16进制bytes类型
print(type(fth))
fth = binascii.a2b_hex(fth)
print(fth)
输出:
<class 'bytes'>
b'FINS\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00k'
import binscii
fth = '46494E530000000C00000000000000000000006B' # 16进制str类型
print(type(fth))
fth = binascii.a2b_hex(fth)
print(fth)
输出:
<class 'str'>
b'FINS\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00k'
第二部分:
binascii.
b2a_hex
() / binascii.
hexlify
()的官方介绍,如下图:
应用实例如下:
import binascii
fth = b'FINS\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00k' # 字节流
fth = binascii.b2a_hex(fth)
print(fth, type(fth))
输出:
b'46494e530000000c00000000000000000000006b' <class 'bytes'>
第三部分:
在Socket通信中接收到的是字节流,转换为十六进制字符串,方法如下:
def process_receive_massage(message):
receive_massage = ''
print('接受到服务器未转换前的数据为:%s' % message)
for message1 in message:
# print(hex(answer2))
if hex(message1)[2::] in ['1', '2', '3', '4', '5', '6', '7', '8', '9']:
recv_msg2 = '0'
receive_massage = receive_massage + recv_msg2 + hex(message1)[2::]
else:
receive_massage = receive_massage + hex(message1)[2::]
return receive_massage
if __name__ == '__main__':
ft = b'FINS\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00k\x00\x00\x00\x02'
ft = process_receive_massage(ft)
print('转换后为:%s' % ft)
输出:
46494e53000100000100000006b00002