与在C / C ++中一样,我们可以打印变量的内存内容,如下所示:
double d = 234.5;
unsigned char *p = (unsigned char *)&d;
size_t i;
for (i=0; i < sizeof d; ++i)
printf("%02x\n", p[i]);
是的,我知道我们可以使用pickle.dump()来序列化一个对象,但它似乎产生了很多多余的东西.. 我们如何才能以纯粹的方式在python中实现这一目标?
答案 0 :(得分:2)
无法从Python代码逻辑级别访问Python对象的内部内存表示,并且您需要编写C扩展。
如果您正在设计自己的序列化协议,那么struct模块就是您正在寻找的模块。它允许从Python值转换为二进制数据,并以您指定的格式返回。例如
import struct
print(list(struct.pack('d', 3.14)))
将显示[31, 133, 235, 81, 184, 30, 9, 64]
,因为它们是3.14的双精度表示的字节值。
注意:struct.pack
在Python 3.x中返回bytes
对象,但在Python 2.x中返回str
对象。要查看Python 2.x中字节的数字代码,您需要使用print map(ord, struct.pack(...))
代替。
答案 1 :(得分:1)
你不能在纯python中做到这一点。但你可以在C中编写一个Python扩展模块,它完全符合你的要求。但它可能不会非常有用。您可以阅读有关扩展模块here
的更多信息我认为Python是指C-Python,而不是PyPy,Jython或IronPython。