Python 十六进制位翻转 ascii
Python hex bit flipping ascii
以下声明来自我正在关注的文档。
“7c bd 9c 91” 2442968444(919cbd7c hex)usec = 2442.9sec
如果您假设:
- 7c -> a
- bd -> b
- 9c -> c
- 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,)
以下声明来自我正在关注的文档。
“7c bd 9c 91” 2442968444(919cbd7c hex)usec = 2442.9sec
如果您假设:
- 7c -> a
- bd -> b
- 9c -> c
- 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,)