Python 十六进制位翻转 ascii

Python hex bit flipping ascii

以下声明来自我正在关注的文档。

“7c bd 9c 91” 2442968444(919cbd7c hex)usec = 2442.9sec

如果您假设:

  1. 7c -> a
  2. bd -> b
  3. 9c -> c
  4. 91 -> d

然后很容易看出他们是如何得到 919cbd7c 的,只需将 abcd 翻转为 dcba

我不明白的是为什么他们不填充实际位。

也就是说我期望19c9dbc7而不是919cbd7c

有没有办法将原始字符串转换成他们期望的字符串?

EG: 将 7cbd9c91 转换为 919cbd7c?

我知道我可以将字符串分成两半并颠倒顺序。但是有没有办法 python 知道这一点并自动解码?

这里是documentation。有问题的部分在第 22 页的第 2 行。

我觉得你想太多了。您看到的十六进制对实际上是单个字节,字节中的位顺序是明确的。只有更高级别的多字节整数的字节顺序可以不止一种方式。幸运的是,字节顺序交换非常容易,因为计算机必须一直这样做(网络字节顺序是大端,但现在大多数 PC 内部都是小端)。

在 Python 中,只需将您获得的原始字节串(文档中显示的示例数据为 b"\x7c\xbd\x9c\x91")传递给具有适当格式参数的 struct.unpack .由于文档说它是一个 little endian 4 字节数字,因此使用 "<L" 作为格式代码来指定 "little-endian unsigned long integer":

>>> bytestring = b"\x7c\xbd\x9c\x91" # from wherever
>>> struct.unpack("<L", bytestring)
(2442968444,)