Bootstrap

Python binascii模块的使用

        本篇文章主要介绍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

 

;