Python: 将HEX字符串转换为字节
我正在尝试制作一个字节帧,准备通过UDP发送。我的类叫Frame,里面有一些属性,比如sync、frameSize、data、checksum等等。我用十六进制字符串来表示这些值。就像这样:
testFrame = Frame("AA01","0034","44853600","D43F")
现在,我需要把这些十六进制值连接在一起,并转换成字节数组,像这样?!
def convertToBits(self):
stringMessage = self.sync + self.frameSize + self.data + self.chk
return b16decode(self.stringMessage)
但是,当我打印转换后的值时,得到的结果和我预期的不一样,或者我不知道怎么正确理解Python的表示法:
This is sync: AA01
This is frame size: 0034
This is data:44853600
This is checksum: D43F
b'\xaa\x01\x004D\x856\x00\xd4?'
第一个字转换得还不错(AA01 -> \xaa\x01),但是(0034 -> \x004D)就不一样了。我试着使用bytearray.fromhex,因为我可以在字节之间加空格,但结果还是一样。你能帮我通过UDP发送相同的十六进制字吗?
1 个回答
5
在Python中,任何可以表示为可打印的ASCII字符的字节都会显示为那个字符。比如说,4
和\x34
是一样的,但Python选择以ASCII字符的形式来显示它。
所以,\x004
实际上和\x00\x34
是一样的,D\x856\x00
和\x44\x85\x36\x00
也是一样的,\xd4?
和\xd4\x3f
也是一样的,原因是:
>>> b'\x34'
'4'
>>> b'\x44'
'D'
>>> b'\x36'
'6'
>>> b'\x3f'
'?'
这只是字节值的表示方式; 这个值是完全正确的,你不需要做其他的事情。
如果你觉得有帮助,可以使用binascii.hexlify()
再次将bytes
值以十六进制的形式可视化:
>>> import binascii
>>> binascii.hexlify(b'\xaa\x01\x004D\x856\x00\xd4?')
b'aa01003444853600d43f'
你会看到4
、D
、6
和?
再次被正确的十六进制字符表示。