我在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)
但是,我不断获得error: unpack requires a string argument of length 12
预计pkt
的大小不是12
然而,
len(pkt)
打印12
pkt
打印7l��}�
repr(pkt)
打印u'7l\x11\ufffd\ufffd}\x00\x00\ufffd\r\x00\x00'
我怀疑编码问题(虽然我绝对不需要任何编码)。
有什么方法可以让它发挥作用吗?
答案 0 :(得分:1)
你有一个长度为12的unicode字符串(unicode字符)。 struct需要一个12字节长的二进制字符串。
你开始使用C代码中的二进制字符串,所以你需要弄清楚它是如何被解码为unicode的,这样你就可以反转操作,或者弄清楚如何从django获取原始的二进制字符串。 / p>
另外,您可能希望根据固定大小类型(uint64_t等)定义C结构,以便在不同平台上没有问题。