为 c_char Python 定义数组长度
Define array length for c_char Python
在 C 头文件中我有:
long param_API test(
___OUT_ char Text[41]
)
在 Python 代码中导入 ctypes
后,我调用 test
:
out_char = (ctypes.c_char)()
def getRes():
result = lib.test(out_char)
return result
但我可能会在日志文件中收到此错误:
output parameter is NULL
我想测试函数没有足够的 space 来写入你的输出。我在这里做错了什么?如何设置 out_char
的长度?
要创建数组,请使用:
out_char = (ctypes.c_char * 41)()
这将创建一个数组对象的实例:
>>> (ctypes.c_char*41)()
<__main__.c_char_Array_41 object at 0x0000000002891048>
您可以访问各个元素:
>>> out_char[0]
b'\x00'
>>> out_char[40]
b'\x00'
>>> out_char[41]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
而在 c_char
的情况下,整个缓冲区:
>>> out_char.raw
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
或者只是以 nul 结尾的部分:
>>> out_char.value
b''
在 C 头文件中我有:
long param_API test(
___OUT_ char Text[41]
)
在 Python 代码中导入 ctypes
后,我调用 test
:
out_char = (ctypes.c_char)()
def getRes():
result = lib.test(out_char)
return result
但我可能会在日志文件中收到此错误:
output parameter is NULL
我想测试函数没有足够的 space 来写入你的输出。我在这里做错了什么?如何设置 out_char
的长度?
要创建数组,请使用:
out_char = (ctypes.c_char * 41)()
这将创建一个数组对象的实例:
>>> (ctypes.c_char*41)()
<__main__.c_char_Array_41 object at 0x0000000002891048>
您可以访问各个元素:
>>> out_char[0]
b'\x00'
>>> out_char[40]
b'\x00'
>>> out_char[41]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
而在 c_char
的情况下,整个缓冲区:
>>> out_char.raw
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
或者只是以 nul 结尾的部分:
>>> out_char.value
b''