我很难通过ctypes将字符串从Python传递到C:
我的C代码(编译成你好。所以)在
...
typedef struct test{
unsigned int a;
unsigned char* b;
} my_struct;
int hello(my_struct *in) {
FILE *fp;
...
fprintf(fp, "%d\t%s\n", in->a, in->b);
fclose(fp);
return 0;
}
我的Python代码:
^{pr2}$我得到了一个错误: hello_args=测试结构(1,名称) TypeError:应为字符串,但找到c\u char_数组_5
我试图将c_char_p更改为c_wchar_p或c_char*5或c_wchar*5等。有时它可以正常运行,结构的第一个int参数可以正确打印,但不能打印第二个字符串指针,我只能得到第一个字符“t”而不是整个单词“test”。在
顺便说一句,我的python3版本是3.3.0
解决方案取决于您是否需要数据类型是可变的(从Python的角度来看)。在
如果不需要数据是可变的,那么就不用担心缓冲区构造函数了。只需将
bytes
对象直接传递给TEST_STRUCT
构造函数。例如如果需要可变缓冲区,则需要在
^{pr2}$TEST_STRUCT
类中以稍微不同的方式指定char*
类型。例如c_char_p
与POINTER(c_char)
表面上看,虽然这两个看起来相似,但却有细微的不同。}则不是。在
POINTER(c_char)
用于char
数据的任何缓冲区。c_char_p
专门用于以NULL结尾的字符串。作为这个条件的一个副作用,所有c_char_p
对象都是不可变的(在python方面),以便使这个保证更容易实施。例如,{65, 66, 67, 0}
是一个字符串("ABC"
),而{相关问题 更多 >
编程相关推荐