创建char *对象发送到c++/c共享对象库的问题



首先,我是ctypes的新手,我确实在寻找我问题的答案。如果您有任何见解,我将不胜感激。

我有一个字节字符串提供给我的另一个工具。它包含了十六进制和其他值。我正在创建c_char_p对象,如下所示:

mybytestring = b'something with a lot of hex x00x00xc7x87x9bb and other alphanumeric and non-word characters'     # Length of this is very long let's say 480
mycharp = c_char_p(mybytestring)

我还创建了c_char_Array,如下所示:

mybuff = create_string_buffer(mybytestring)

问题是当我发送mycharp或mybuff到c++库。so函数时,字符串在NULL终止符处被切断('x00'第一次出现)

我正在加载c++库并按如下方式调用函数:

lib_handle = cdll.LoadLibrary(mylib.so)
lib_handle.myfunction(mycharp)
lib_handle.myfunction(mybuff)

c++函数需要一个char *

是否有人知道如何能够发送包含NULL终止符('x00')的整个字符串?

谢谢

将原始数据添加到vector<char> vec,并发送vec.data()

但实际问题是

c++函数需要一个char *.

你需要改变这一点(接受第二个arg=缓冲区的长度,或者例如,接受一个vector<char>),如果你想让它接受一个包含null的字符数组。

或者你可以弄清楚你实际想要c++函数做什么,并使self成为字符数组的"预处理",在每个新数组中添加一个空终止符,然后发送给c++函数。

例如,你可能决定"input"数组实际上是一组c-string:你需要做一个简单的解析来"拆分"并在一个循环中一个接一个地发送给c++。

或者您决定输入可以是UTF16而不是UTF8的字符串。然后,您需要尽可能地将其转换为UTF8并发送给c++函数。

最新更新