2024-06-16 10:57:29 发布
网友
如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]);
是的,我知道我们可以用泡菜。倾倒()序列化一个对象,但它似乎生成了很多冗余的东西。。 我们如何在python中以一种纯粹的方式实现这一点呢?在
Python对象的内部内存表示无法从Python代码逻辑级别访问,因此需要编写一个C扩展。在
如果您正在设计自己的序列化协议,那么struct模块就是您要寻找的。它允许从Python值转换为二进制数据并返回到您指定的格式。例如
import struct print(list(struct.pack('d', 3.14)))
将显示[31, 133, 235, 81, 184, 30, 9, 64],因为这些是3.14的双精度表示的字节值。在
[31, 133, 235, 81, 184, 30, 9, 64]
注意:struct.pack在python3.x中返回一个bytes对象,而在python2.x中返回一个str对象。要查看python2.x中字节的数字代码,需要改为使用print map(ord, struct.pack(...))。在
struct.pack
bytes
str
print map(ord, struct.pack(...))
在纯python中不能这样做。但是,您可以用C编写一个Python扩展模块,它完全可以满足您的要求。但这可能不会很有用。您可以阅读更多关于扩展模块here
我假设Python指的是C-Python,而不是PyPy、Jython或IronPython。在
Python对象的内部内存表示无法从Python代码逻辑级别访问,因此需要编写一个C扩展。在
如果您正在设计自己的序列化协议,那么struct模块就是您要寻找的。它允许从Python值转换为二进制数据并返回到您指定的格式。例如
将显示
[31, 133, 235, 81, 184, 30, 9, 64]
,因为这些是3.14的双精度表示的字节值。在注意:
struct.pack
在python3.x中返回一个bytes
对象,而在python2.x中返回一个str
对象。要查看python2.x中字节的数字代码,需要改为使用print map(ord, struct.pack(...))
。在在纯python中不能这样做。但是,您可以用C编写一个Python扩展模块,它完全可以满足您的要求。但这可能不会很有用。您可以阅读更多关于扩展模块here
我假设Python指的是C-Python,而不是PyPy、Jython或IronPython。在
相关问题 更多 >
编程相关推荐