Python-在Django中使用struct解包

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,

我在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,
        &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)
prints
12

pkt
打印
7l��}�

repr(pkt)
prints
u'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/任意编码字符串。