创建char *对象发送到c++/c共享对象库的问题
Trouble creating char * object to send to c++/c shared object library
首先,我是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++函数。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 在共享缓冲区内存中创建 ::std::string 对象
- 如何创建一个共享对象与另一个.所以在Cmake
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 有没有办法列出所有共享内存对象的名称?
- 共享的从属对象
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 共享对象、符号、C/C++ 库链接和加载
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- C++对象共享属性 - 使用指针或引用
- 如何测试共享对象/共享库已正确编译
- 创建对象共享指针以共享指针为参数
- 限制C++中虚拟基类的对象共享
- 在Ada95中跨共享库/对象共享数据
- 这种线程间对象共享策略是否合理
- 如何更改对象共享指针指向,而它被其他线程占用
- 初始化仅由一组对象共享的静态变量