[英]Python: Converting HEX string to bytes
我正在尝试制作将通过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发送相同的十六进制字吗?
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'
然后您会看到4
, D
, 6
和?
再次由正确的十六进制字符表示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.