c++ - 嵌入式 Python 值冲突

标签 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
xref 194 28 0000000016 00000 n 0000001374 00000 n 0000001521 00000 n 0000001915 00000 n 0000002047 00000 n 0000002547 00000 n 0000002661 00000 n 0000002773 00000 n 0000002800 00000 n 0000003401 00000 n 0000003656 00000 n 0000004166 00000 n 0000005703 00000 n 0000006124 00000 n 0000006373 00000 n 0000006828 00000 n 0000006898 00000 n 0000007022 00000 n 0000031268 00000 n 0000031531 00000 n 0000032131 00000 n 0000056344 00000 n 0000079808 00000 n 0000080674 00000 n 0000085029 00000 n 0000085946 00000 n 0000001196 00000 n 0000000873 00000 n trailer <> <6F4E88EE2CFAE8419CCB5AF471C4A73F>]/Prev 241987/XRefStm 1196>> startxref 0 %%EOF

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

但实际文件要长得多。我不明白为什么数据被削减。

最佳答案

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

一般来说,正是出于这个原因,在 C 语言中对二进制数据使用字符串函数时必须小心。

关于c++ - 嵌入式 Python 值冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302818/

相关文章:

c++ - 一个奇怪的打印功能错误

Python - 获取多部分电子邮件的正文

Linux 操作系统/英特尔 64 位架构的 CPU 温度

c - 为什么这个程序会崩溃?

c - 迷你拼图 IP header

c++ - 类的全局对象和静态成员

c++ - 在 C++ 中的变量声明中使用 struct 关键字

c++ - 以最佳方式从 system() 命令捕获标准输出

python - 调用函数时如何修复“未定义”的 "NameError: name ' 问题?

python - 正则表达式查找第一次出现的字符,除非它在某个字符集中