Python十六进制位翻转ascii

时间:2016-03-05 23:57:44

标签: python endianness

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

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

如果您认为:

  1. 7c - >一个
  2. bd - > B'/ LI>
  3. 9c - > ç
  4. 91 - > d
  5. 然后只需将919cbd7c翻转到abcd即可轻松了解他们如何获得dcba

    我不明白为什么他们没有填补实际位。

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

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

    EG:将7cbd9c91转换为919cbd7c

    我知道我可以拆分两个字符串并反转顺序。但有没有一种方法python知道这一点,并可以自动解码?

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

1 个答案:

答案 0 :(得分:2)

我认为你正试图过多地考虑它。您看到的十六进制对实际上是单个字节,并且字节内的位的顺序是明确的。它只是高级多字节整数的字节顺序,可以多于一种方式。幸运的是,字节顺序交换非常简单,因为计算机必须一直这样做(网络字节顺序是大端的,但是现在大多数PC都是内部的小端)。

在Python中,只需将您获得的原始字节字符串(对于文档中显示的示例数据b"\x7c\xbd\x9c\x91")传递给struct.unpack,并使用适当的格式参数。由于文档说它是一个小字节4字节数字,因此使用"<L"作为格式代码来指定&#34; little-endian无符号长整数&#34;:

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