我需要通过将其转换为数组
来访问char *的内容这是一个演示:
from ctypes import *
foo = (c_char * 4)()
foo.value = "foo"
print foo.raw # => 'foo\x00'
foo_ptr = cast(foo, c_char_p)
print foo_ptr.value # => 'foo'
现在我想将foo_ptr转换回(c_char * 4)。这些都不起作用
foo_ = (c_char * 4)(foo_ptr)
foo_ = cast(foo_ptr, c_char * 4)
答案 0 :(得分:5)
找到它
foo_ = (c_char * 4).from_address(foo_ptr._get_buffer_value())
print foo_.raw # => 'foo\x00'
答案 1 :(得分:0)
为什么不保留原始 foo ?:
>>> foo = (c_char * 4)()
>>> foo_ptr_1 = ct.cast( foo, ct.c_char_p )
>>> foo_ptr_1
c_char_p(28211760)
>>> foo_ptr_2 = ct.cast( foo, ct.c_char_p )
>>> foo_ptr_2
c_char_p(28211760)
因此,强制转换操作不会复制数据,而只返回指向数组内容的指针。你也可以通过指针编制索引,虽然这有点不太好。
或者,如果要创建阵列 de novo ,请执行以下操作:
>>> array_type = (c_char * 4 )
>>> foo = array_type.from_address( foo_ptr )
>>> foo.value
'abc'