Python:将HEX字符串转换为字节

时间:2014-07-31 20:37:34

标签: python string udp hex bytearray

我试图创建我将通过UDP发送的字节帧。我的课程框架,其中包含同步 frameSize 数据校验和等属性我使用十六进制字符串表示值。像这样:

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?'

所以,第一个单词被转换为ok(AA01 - > \ xaa \ x01)但是(0034 - > \ x004D)它们不一样。我尝试使用 bytearray.fromhex ,因为我可以在字节之间使用空格但我得到了相同的结果。你能帮我通过UDP发送相同的十六进制字吗?

1 个答案:

答案 0 :(得分:2)

Python显示任何可以表示可打印ASCII字符的字节作为该字符。 4\x34相同,但因为它选择在表示中打印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'

您会看到4D6?再次由正确的十六进制字符表示。