使用ctypes将字符串从python传递到c ++-仅发送第一个字符

时间:2019-03-07 06:32:25

标签: python c++ char ctypes

我正在尝试使用ctypes将多字符字符串从Python发送到C ++。但是,只会传递每个字符串的第一个字符。

这是Python中的调用:

ctypes.cdll.LoadLibrary(os.path.abspath("nodispersion.so"))
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion('teststring')

以及我在C ++中的定义方式

extern "C" void nodispersion(char* test)
{

    cout << "print test " << test << "\n";
}

仅打印“ t”。

其他类型(例如int)也可以通过。另外,如果我在c ++中定义char *,它可以很好地打印,因此我认为它是从Python传递过来的东西。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

感谢狄龙·戴维斯(Dillon Davis):

  

尝试ctypes.CDLL(os.path.abspath('nodispersion.so'))。nodispersion(b'teststring')。注意b

这在传递字符串'teststring'

的情况下解决了我的问题

但是我然后想传递一个以前在Python中定义为变量的字符串。这可以通过使用bytes函数并将编码定义为'utf8'来解决:

a = 'teststring'
ctypes.CDLL(os.path.abspath('nodispersion.so')).nodispersion(bytes(a, encoding='utf8'))