如何将C ++中的空字符序列转换为Python中的等效字符?

时间:2019-07-09 16:42:38

标签: python c++ ctypes

我正在Python中使用ctypes来访问共享C库中的函数。其中一个功能的参数之一需要一个char类型的空数组才能将错误消息写入其中。 C ++中的数组代码很简单;

char messageBuffer[256];

我想用Python编写等效项,以便可以将包含正确数据类型的数组传递给函数。我曾尝试仅使用长度为256的Python创建和数组,但收到错误消息;

mydll.TLBP2_error_message(m_handle, errorCode, messageBuffer)

ArgumentError: argument 3: <class 'TypeError'>: Don't know how to convert parameter 3

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以在 ctype

中使用create_string_buffer()函数

如果您需要可变的内存块,则ctypes具有一个create_string_buffer()函数,该函数可以通过各种方式创建它们。可以使用raw属性访问(或更改)当前存储块的内容。如果要以NUL终止的字符串访问它,请使用value属性:

>>> from ctypes import *
>>> p = create_string_buffer(3)      # create a 3 byte buffer, initialized to NUL bytes
>>> print sizeof(p), repr(p.raw)
3 '\x00\x00\x00'
>>> p = create_string_buffer("Hello")      # create a buffer containing a NUL terminated string
>>> print sizeof(p), repr(p.raw)
6 'Hello\x00'
>>> print repr(p.value)
'Hello'
>>> p = create_string_buffer("Hello", 10)  # create a 10 byte buffer
>>> print sizeof(p), repr(p.raw)
10 'Hello\x00\x00\x00\x00\x00'
>>> p.value = "Hi"
>>> print sizeof(p), repr(p.raw)
10 'Hi\x00lo\x00\x00\x00\x00\x00'
>>>

要创建包含C类型wchar_t的Unicode字符的可变存储器块,请使用create_unicode_buffer()函数。

for more information refer: ctype-fundamental-data-types