以下声明来自我正在关注的文档。
“7c bd 9c 91” 2442968444(919cbd7c hex)usec = 2442.9sec
如果您认为:
然后只需将919cbd7c
翻转到abcd
即可轻松了解他们如何获得dcba
。
我不明白为什么他们没有填补实际位。
也就是说我希望19c9dbc7
而不是919cbd7c
。
有没有办法将原始字符串转换为他们期望的内容?
EG:将7cbd9c91
转换为919cbd7c
?
我知道我可以拆分两个字符串并反转顺序。但有没有一种方法python知道这一点,并可以自动解码?
这是documentation。有问题的部分在第22页的第2行。
答案 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,)