【问题标题】:python hex payload into bytearray and convert endiannesspython 十六进制有效负载转换为字节数组并转换字节序
【发布时间】:2021-11-07 23:19:09
【问题描述】:

您好,我正在寻找一种解码十六进制编码传感器有效载荷的方法。

有效载荷是 payload_hex = "11154c1789870005bd0005bd01000200002900" 我使用将它转换为字节数组。

byte = bytearray.fromhex(payload)
decoded = {}
decoded["byte_7"]=byte[7]
decoded["byte_8"]=byte[8]
print(decoded)

我得到的结果是 byte_7 = 5 和 byte_8 = 189,但这是错误的,正确的数字是 byte_7 = 1280 和 byte_8 = 189。问题是字节序。十六进制 05 应为 1280,十六进制 bd 应为 189。

谁能给我一个提示如何让它在 python 中工作?

提前致谢!

【问题讨论】:

  • 您的代码正在执行0x05 + 0xbd,这与0x05bd相同。同样,在十进制中,5 + 6 不是 56
  • 嘿 ForceBru,你是完全正确的,但是当我逐字节解码而不添加它们时,我得到了错误的值。

标签: python arrays endianness


【解决方案1】:

字节 7 不能是 1280,因为 一个 字节只能容纳 0 到 255 之间的数字。十六进制 05 只是 5,而不是 1280。然而,十六进制 0500 是 1280。

你应该像05bd那样把两个字节放在一起,这是通过移位和ORing完成的:

>>> 0x05 << 8 | 0xbd
1469
>>> hex(0x05 << 8 | 0xbd)
'0x5bd'

【讨论】:

  • 谢谢。你是完全正确的我的错误。
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2019-02-12
相关资源
最近更新 更多