我最近继承了一个项目,在该项目中我们反序列化了一个由我无法更改的系统写出的一串数据(希望他们使用标准串行器,但我无法更改此项)。在大多数情况下,我能够使用ctypes来表示结构并将数据正确地转换为Python,但是我们有一些情况下底层的数据结构是一团糟(再次,无论我尝试过多少次都无法改变)。当C结构定义如下2例正在推动我坚果试图找到一种有效的方式是:在Python中使用动态数组反序列化C结构
简单的例子:
struct b{
int data;
int more_data;
};
struct a{
int num_entries;
b* data;
};
,当它是序列化,挤满了b *数据进入内存,就好像它是一个静态数组减速。
这里来最恐怖的情况下,我不得不面对:
struct c{
int a;
int b;
};
struct b{
int random_data;
c* data;
int more_data;
};
struct a{
int len; // This actually defines the length in struct b for "data" array size
b nested_data;
c why_not_it_is_this_poorly_organized;
}
任何帮助将肯定可以理解的!
看起来很像https://stackoverflow.com/questions/8392203/dynamic-arrays-and-structures-in-structures-in-python?rq=1 –
这问题正在朝另一个方向发展,它不会解决您接收字节流然后需要将数据转换回此结构表示形式的情况。 – FrenchToast
使用一些依赖于平台的(至多)二进制格式是一个非常糟糕的主意。使用文本格式或至少定义独立于C平台的二进制格式。然后在两边使用适当的编组。 – Olaf