和在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 中实现这一点?
无法从 Python 代码逻辑级别访问 Python 对象的内部内存表示,您需要编写 C 扩展。
如果您正在设计自己的序列化协议(protocol),那么可能是 struct模块是你要找的。它允许将 Python 值转换为二进制数据并以您指定的格式返回。例如
import struct
print(list(struct.pack('d', 3.14)))
将显示 [31, 133, 235, 81, 184, 30, 9, 64]
因为这些是 3.14 的 double 表示的字节值。
注意:struct.pack
在 Python 3.x 中返回一个 bytes
对象,在 Python 2.x 中返回一个 str
对象。要在 Python 2.x 中查看字节的数字代码,您需要改用 print map(ord, struct.pack(...))
。
我是一名优秀的程序员,十分优秀!