Python-在Django中使用struct解包
我在Django请求中得到一个C结构作为JSON字段,需要对其进行解析 结构如下:Python-在Django中使用struct解包,python,c,django,struct,Python,C,Django,Struct,我在Django请求中得到一个C结构作为JSON字段,需要对其进行解析 结构如下: typedef struct __attribute__((packed)) _data_t { unsigned long long timestamp; unsigned int value; } data_t; 编辑:我通过libcurl上传这个,如下所示: data_t data; ... curl_formadd(&formpost,
typedef struct __attribute__((packed)) _data_t
{
unsigned long long timestamp;
unsigned int value;
} data_t;
编辑:我通过libcurl上传这个,如下所示:
data_t data;
...
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "data",
CURLFORM_COPYCONTENTS, &data,
CURLFORM_CONTENTSLENGTH, size,
CURLFORM_END);
现在,我尝试使用python struct.unpack来解包这些数据,如下所示:
packet=unpack('>QI',pkt)
然而,我不断得到错误:unpack需要一个长度为12的字符串参数
如果pkt
的大小不是12,这是预期的
但是,
len(pkt)
prints12
pkt
打印7l��}�代码>
repr(pkt)
printsu'7l\x11\ufffd\ufffd}\x00\x00\ufffd\r\x00\x00'
我怀疑编码问题(尽管我绝对不需要任何编码)
有什么方法可以让它工作吗?您有一个长度为12(unicode字符)的unicode字符串。结构需要一个长度为12字节的二进制字符串
您从C代码中的一个二进制字符串开始,因此您需要了解它是如何被解码为unicode的,以便可以反转操作,或者了解如何从django获取原始二进制字符串
此外,您可能希望根据固定大小的类型(uint64_t等)定义C结构,以便在不同的平台上不会出现问题。如何打包该结构?如果您是指C,我已经在typedef
中对其进行了描述,在python中,我假设QI
表示没有填充。字符串在HTTP请求中是什么样子的?您确定输入正确吗,包括任何编码设置?您得到的是一个12个字符的Unicode字符串,它与任何直接明显的编码(UTF8,latin-1)中的12字节字符串都不对应。我实际上没有包括任何编码字符串,请参阅如何发布数据,我得到的是Django中的Unicode/任意编码字符串。