简体   繁体   中英

How can I convert an empty character sequence in C++ to its equivalent in Python?

I am using ctypes in Python to access functions from a shared C library. One of the parameters for one of the functions requires an empty array of the type char to write error messages into. The code for the array in C++ is simple;

char messageBuffer[256];

I would like to write the equivalent in Python so that I can pass an array containing the correct data type to the function. I've tried simply creating and array in Python of length 256, but I get the error message;

mydll.TLBP2_error_message(m_handle, errorCode, messageBuffer)

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

Any help is appreciated.

you can use create_string_buffer() function in ctype package

If you need mutable memory blocks, ctypes has a create_string_buffer() function which creates these in various ways. The current memory block contents can be accessed (or changed) with the raw property; if you want to access it as NUL terminated string, use the value property:

 >>> 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' >>> 

To create a mutable memory block containing unicode characters of the C type wchar_t use the create_unicode_buffer() function.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM