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

2024-03-28 12:15:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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发送相同的十六进制单词吗?


Tags: selfdata字节issyncthisframeudp
1条回答
网友
1楼 · 发布于 2024-03-28 12:15:34

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

这只是字节值的表示法;该值完全正确,您无需执行任何其他操作。

如果有帮助,可以使用^{}再次将bytes值可视化为十六进制:

>>> import binascii
>>> binascii.hexlify(b'\xaa\x01\x004D\x856\x00\xd4?')
b'aa01003444853600d43f'

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

相关问题 更多 >