16进制与字符串的转换

Posted on 2017-07-12 09:40  dyzne  阅读(2253)  评论(0编辑  收藏  举报

一、转16进制

方法1:

列表数据转16进制字符串

import struct
a=[0xAA,0x01,0x17,0x00,0x60,0x0A,0x00,0x0A,0x00,0xD0,0x11,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E]
data_hex=struct.pack("%dB"%(len(a)),*a)
print data_hex
#'\xaa\x01\x17\x00`\n\x00\n\x00\xd0\x11\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e'

用法:data_hex这种形式的数据可以当成16进制来发送(socket,serial等等)

 方法2:

字符串转16进制字符串

>>> from binascii import *
>>> b2a_hex('aaaaaaa')
'61616161616161'
>>> b2a_hex('aaaaaaa').encode('utf-8')
'61616161616161'

用法:在socket中若收到的数据是16进制的含义的,但接收的时候是字符串形式,可以将其转成16进制字符串形式,易于显示

方法3:

字符串转成字面相等的16进制字符串

>>> from binascii import *
>>> a2b_hex('A1A1A1')
'\xa1\xa1\xa1'

用法:同方法1一样

 

列表在使用append的时候,若添加的数据无法识别成字符串,则以16进制字符串保存起来

socket server
data:open ['open']
tohex:6f70656e ['6f70656e']
data:open ['open', 'open']
tohex:6f70656e ['6f70656e', '6f70656e']
data:open', 'open', '\xaa\xaa\xaa\xaa\xaa']
tohex:aaaaaaaaaa ['6f70656e', '6f70656e', 'aaaaaaaaaa']

此时的列表里的16进制也可当成16进制发送出去,同方法1