嵌入式Python价值冲突

时间:2013-01-13 11:02:24

标签: c++ python c

我在我的C程序中使用嵌入式python。 python脚本从在线源获取文件并返回它收到的数据。

包含此特定脚本的程序的C部分如下:

char* Drop::getFile(std::string path){
  PyObject *pValue;
  char* fileData = NULL;
  pFunc = PyObject_GetAttrString(pModule,"getFile");
  pArgs = PyTuple_New(1);
  PyTuple_SetItem(pArgs,0,PyString_FromString(path.c_str()));
  pValue = PyObject_CallObject(pFunc,pArgs);
  fileData = PyString_AsString(pValue); 
  Py_DECREF(pFunc);
  Py_DECREF(pArgs);
  return fileData;
}

fileData确实得到一个值,但它指向的数据与python脚本从网络中提取的数据不匹配。我正在测试的是一个pdf文件

  

%PDF-1.4%âãÏÓ   194 0 obj<> endobj
  外部参照   194 28   0000000016 00000   0000001374 00000   0000001521 00000   0000001915 00000   0000002047 00000   0000002547 00000   0000002661 00000   0000002773 00000   0000002800 00000   0000003401 00000   0000003656 00000   0000004166 00000   0000005703 00000   0000006124 00000   0000006373 00000   0000006828 00000   0000006898 00000   0000007022 00000   0000031268 00000   0000031531 00000   0000032131 00000   0000056344 00000   0000079808 00000   0000080674 00000   0000085029 00000   0000085946 00000   0000001196 00000   0000000873 00000   预告片   <> < 6F4E88EE2CFAE8419CCB5AF471C4A73F>] / Prev 241987 / XRefStm 1196>   startxref   0   %% EOF

     

221 0 obj<>流   hÞb`bYÇÀÆÀÀÆÈ

但实际文件要长得多。我很遗憾为什么要削减数据。

1 个答案:

答案 0 :(得分:0)

您需要使用PyString_AsStringAndSize并使用文件的长度以及返回的字节数。如果将返回的字节视为c字符串,则将第一个0字节解释为字符串的结尾。

通常,在C语言中对二进制数据使用字符串函数时必须小心。