0

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%âãÏÓ1940 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 0000003 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 <> <6F4E88EE2CFAE8419CCB5AF471C4A73F>] / Prev 241987 / XRefStm 1196 >> startxref 0 %% EOF

221 0obj<> `bstreamhÞbYÇÀÆÀÀÆÈ

しかし、実際のファイルははるかに長くなります。なぜデータがカットされているのか迷っています。

4

1 に答える 1

0

PyString_AsStringAndSizeファイルの長さと返されたバイトを使用して使用する必要があります。返されたバイトをc文字列として扱う場合は、最初の0バイトを文字列の終わりとして解釈します。

一般に、まさにこの理由から、Cのバイナリデータで文字列関数を使用する場合は注意が必要です。

于 2013-01-13T11:13:30.537 に答える