1

首先,我是 ctypes 的新手,并且确实搜索了我的问题的答案。绝对会欣赏这里的任何见解。

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

mybytestring = b'something with a lot of hex \x00\x00\xc7\x87\x9bb 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') 的整个字符串吗?

谢谢

4

1 回答 1

2

将您的原始数据添加到 a vector<char> vec,然后发送vec.data()

但实际的问题是

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

vector<char>如果您希望它接受包含 null 的 char 数组,则需要更改此设置(以接受缓冲区的第二个 arg=length,或者例如接受 a )。

或者,您可以弄清楚您实际上希望 c++ 函数做什么,并使 self 成为 char 数组的“预处理”,为每个新数组添加一个空终止符,然后发送到 c++ 函数。

例如,您可能决定“输入”数组实际上是一组 c 字符串:您需要做一个简单的解析以“拆分”并在一个循环中发送到 c++,一个接一个。

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

于 2013-04-12T06:35:36.320 回答