我在我的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 %% EOF221 0 obj<>流 hÞb
`b
YÇÀÆÀÀÆÈ
但实际文件要长得多。我很遗憾为什么要削减数据。
答案 0 :(得分:0)
您需要使用PyString_AsStringAndSize
并使用文件的长度以及返回的字节数。如果将返回的字节视为c字符串,则将第一个0字节解释为字符串的结尾。
通常,在C语言中对二进制数据使用字符串函数时必须小心。