我正在开发一个服务器(用 Python 实现)客户端(用 C 实现)应用程序。 我想在服务器端(Python)使用结构模块解压从 C 客户端接收到的原始字节。
我的 C 结构(来自 C 客户端):
typedef struct lokesh{
int command;
union
{
struct{
int data[100];
int ttl[100];
};
struct{
char config[256];
};
};
} mystructdata;
在服务器端解包(Python):-
import struct
data,address=socket.recvfrom(1024)
result=struct.unpack('<i 2048s',data)
print(result[0])
但是我收到一个错误:-
struct.error: unpack require object of size 2052
我认为问题出在我的解包方法的格式字符串 '<i 2048s'
中争论。
编辑:-
now, i have replaced format string
'<i 2048s'
with format string'<i 256s'
最佳答案
Lokesh,我不是 Python 专家,但在我看来你是在告诉 Python 的 struct 你有:
- 一个小端整数,后跟
- 2048 个字符[]
(基于 http://docs.python.org/2/library/struct.html#format-characters )
看看您的 C 结构定义,那根本不是您所拥有的。你有:
- 一个整数,后跟以下之一:
- 两个整数数组,每个数组包含 100 个元素
- 一个包含 256 个元素的字符数组
现在,如果不查看将结构推送到线路上的 C 代码,就很难了解整数的字节顺序(网络字节顺序是大端)。但除此之外,您对 struct 的数据规范看起来是错误的。
我猜测 C 结构中 union 的解释将取决于 command 的内容。因此,您似乎需要首先检查 command,然后基于此为 struct 提出适当的格式字符串。请注意,在 data/ttl 情况下,您可能会遇到结构填充问题,因为客户端的编译器可能会决定在 data 和 ttl 之间插入一些填充数组以满足对齐要求等。
关于python - 如何在 python 3.2 中解压缩 c 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520023/