python中char*的问题

2024-09-24 20:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚包装了一个头文件(.h)并创建了它。函数Encrypt接受char*bb,然后使用memcpy()填充它。如果我想从c代码调用这个函数,我必须做(char*bb=(char*)new char[200];Encrypt(…,…,…,bb);)。如何从python调用它?python中(char*bb=(char*)new char[200];)的等价物是什么?在

int Encrypt (string key, string iv, string plaintext, char* bb)
{
std::string ciphertext;

CryptoPP::AES::Encryption aesEncryption((byte *)key.c_str(), CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption( aesEncryption, (byte *)iv.c_str() );

CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext ) );
stfEncryptor.Put( reinterpret_cast<const unsigned char*>( plaintext.c_str() ), plaintext.length() );
stfEncryptor.MessageEnd();

memcpy(bb,ciphertext.c_str(), ciphertext.size());
return ciphertext.size();
};

从c调用Encrypt():

^{pr2}$

我在python中使用create_string_buffer(“,400),但它不起作用。在


Tags: key函数newstringencryptaesbbchar
2条回答

虽然不能直接从python调用C函数,但编写python模块很容易,请参见http://docs.python.org/extending/extending.html

编辑

ctype模块允许您直接调用纯C函数。在

请检查此URL以获得答案:http://docs.python.org/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference

我想你需要在“char*bb”的末尾插入'\0'(终止空字符)。如果数据是字符串而不是二进制,则使用strcpy。 抱歉,不是您的答案,但您可能会得到内存错误。在

相关问题 更多 >