【发布时间】:2017-09-04 01:26:07
【问题描述】:
我在表单中有一个函数
void f(unsigned char *out, const unsigned long long outlen,
const unsigned char *in, const unsigned long long inlen);
当我尝试使用它时:
data_in = ['a', 'b', 'c', 'd', 'e']
data_out = [0]*100
f(data_out, len(data_out), data_in, len(data_in))
(其实我是想传bytearrays)
我得到类似的东西:
Traceback (most recent call last):
File "xxxx/basic_test.py", line 6, in <module>
f(data_out, len(data_out), data_in, len(data_in))
TypeError: in method 'f', argument 1 of type 'unsigned char *'
我尝试了不同的传递 data_out 的方法(编码、字节数组、[0]*100 等)但似乎没有任何效果......
这应该如何工作?
以防万一,这可能会产生一些影响,这是一个 C 函数,所以为了避免损坏,我用
包装它extern "C"
{
...
}
很遗憾,我无法更改 c 代码
【问题讨论】:
-
尝试使用
ctypes,分配一个数组并通过引用传递。 -
C != C++。请确保使用您使用的实际语言进行标记(大概是 C)。
-
它是嵌入在 C++ 11 应用程序中的遗留代码。编译器是 C++(修改等),这就是我澄清 extern "C" 的原因,因为它确实改变了函数的签名。