Python:ctypes如何将c_char_Array转换为c_char_p

问题描述 投票:0回答:1

函数create_string_buffer(b"foo", 3)返回类型c_char_Array_3。试图通过c_char_p预计会在TypeError: incompatible types, c_char_Array_3 instance instead of c_char_p instance的情况下通过这个问题。如何将create_string_buffer的输出传递到需要c_char_p的字段?

我认为这个人有同样的问题:https://ctypes-users.narkive.com/620LJv10/why-doesn-t-c-char-array-get-coerced-on-assignment-to-a-pointer

但是,我不清楚答案是什么。

python ctypes
1个回答
1
投票

您可以将create_string_buffer对象传递给具有c_char_p作为.argtypes参数的函数,但不能在它是结构的成员时传递。 cast可以解决它。您在问题中提供的链接中提到了这一点。

from ctypes import *

class foo(Structure):
    _fields_ = [('bar',c_char_p)]

s = create_string_buffer(b'test')

f = foo()
f.bar = cast(s,c_char_p)
print(f.bar)
s[0] = b'q'
print(f.bar)

输出:

b'test'
b'qest'
© www.soinside.com 2019 - 2024. All rights reserved.