Python - 在Django中使用struct解压缩

时间:2013-11-19 09:25:40

标签: 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,
        &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'

我怀疑编码问题(虽然我绝对不需要任何编码)。

有什么方法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

你有一个长度为12的unicode字符串(unicode字符)。 struct需要一个12字节长的二进制字符串。

你开始使用C代码中的二进制字符串,所以你需要弄清楚它是如何被解码为unicode的,这样你就可以反转操作,或者弄清楚如何从django获取原始的二进制字符串。 / p>

另外,您可能希望根据固定大小类型(uint64_t等)定义C结构,以便在不同平台上没有问题。