如何在 Python 中解压二进制十六进制格式的数据?
使用 PHP pack() 函数,我已将字符串转换为二进制十六进制表示形式:
$string = md5(time); // 32 character length
$packed = pack('H*', $string);
H* 格式意思是“十六进制字符串,高半字节在前”。
要在 PHP 中解压此文件,我只需使用带有 H* 格式标志的 unpack() 函数即可。
我如何用 Python 解压这些数据?
Using the PHP pack() function, I have converted a string into a binary hex representation:
$string = md5(time); // 32 character length
$packed = pack('H*', $string);
The H* formatting means "Hex string, high nibble first".
To unpack this in PHP, I would simply use the unpack() function with the H* format flag.
How would I unpack this data in Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有一个简单的方法可以使用 binascii 模块来做到这一点:
除非我误解了半字节顺序(高半字节在前是默认的......任何不同都是疯狂的),这应该足够了!
此外,Python 的
hashlib.md5
对象有一个hexdigest()
方法,可以自动将 MD5 摘要转换为 ASCII 十六进制字符串,因此 MD5 甚至不需要此方法消化。 希望有帮助。There's an easy way to do this with the
binascii
module:Unless I'm misunderstanding something about the nibble ordering (high-nibble first is the default… anything different is insane), that should be perfectly sufficient!
Furthermore, Python's
hashlib.md5
objects have ahexdigest()
method to automatically convert the MD5 digest to an ASCII hex string, so that this method isn't even necessary for MD5 digests. Hope that helps.struct.pack 没有相应的“十六进制半字节”代码,因此您需要首先手动打包为字节,例如:
或者更好,您可以只使用十六进制编解码器。 IE。
要解包,您可以类似地将结果编码回十六进制。
但是,请注意,对于您的示例,编码时可能根本不需要通过十六进制表示进行往返。 直接使用md5二进制摘要即可。 IE。
这相当于您的 pack()ed 表示形式。 要获取十六进制表示,请使用上面相同的解包方法:
[编辑]:更新为使用更好的方法(十六进制编解码器)
There's no corresponding "hex nibble" code for struct.pack, so you'll either need to manually pack into bytes first, like:
Or better, you can just use the hex codec. ie.
To unpack, you can encode the result back to hex similarly
However, note that for your example, there's probably no need to take the round-trip through a hex representation at all when encoding. Just use the md5 binary digest directly. ie.
This is equivalent to your pack()ed representation. To get the hex representation, use the same unpack method above:
[Edit]: Updated to use better method (hex codec)
在 Python 中,您可以使用 struct 模块来实现此目的。
华泰
In Python you use the struct module for this.
HTH