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

Posted

技术标签:

【中文标题】如何将 C++ 中的空字符序列转换为 Python 中的等效字符?【英文标题】:How can I convert an empty character sequence in C++ to its equivalent in Python? 【发布时间】:2019-07-09 16:42:38 【问题描述】:

我在 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

感谢任何帮助。

【问题讨论】:

ctyes一无所知,但this有帮助吗?不确定是否重复。 请按照[SO]: How to create a Minimal, Complete, and Verifiable example (mcve)格式化您的问题。添加 C 函数头,以及使用它的 Python 代码(不仅是调用,还加载库,并为调用准备东西)。跨度> 【参考方案1】:

您可以使用 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

【讨论】:

以上是关于如何将 C++ 中的空字符序列转换为 Python 中的等效字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何将逗号分隔的字符串转换为 Python 中的列表?

Python 2.7:如何将字符串中的 unicode 转义转换为实际的 utf-8 字符

如何在 C++ 中将字符串转换为字符? [复制]

如何将 Python 中的脚本转换为 C++?

将 C++ 字符串类转换为 Python 字符串

如何将 C++ 或 C 中的字符串转换为整数数组?