繁体   English   中英

Python:将十六进制字符串转换为字节

[英]Python: Converting HEX string to bytes

我正在尝试制作将通过UDP发送的字节帧。 我有Frame类,它具有syncframeSizedatachecksum等属性。我使用十六进制字符串表示值。 像这样:

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'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM