【问题标题】:Python: Converting HEX string to bytesPython:将 HEX 字符串转换为字节
【发布时间】:2014-09-23 23:07:21
【问题描述】:

我正在尝试制作将通过 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 发送相同的十六进制字吗?

【问题讨论】:

  • 字符串 4D 是 \x34\x44 所以没有问题,你只是误读了输出

标签: python string udp hex bytearray


【解决方案1】:

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? 再次由正确的十六进制字符表示。

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多