在ctypes中转换bytearray实例
在使用pycharm开发时,下面的代码在运行覆盖率单元测试时,有时会出问题(被转换的结构内容会改变),但在运行普通单元测试时却没有问题。以下是相关的代码部分:
class SomeStruct(ctypes.Structure):
_fields_ = [
('field', ctypes.c_char)
]
res = bytearray(b'12345')
ctypes.cast(bytes(res), ctypes.POINTER(SomeStruct)).contents
不过,下面的代码总是能正常工作:
class SomeStruct(ctypes.Structure):
_fields_ = [
('field', ctypes.c_char)
]
res = bytearray(b'12345')
res_bytes = bytes(res)
ctypes.cast(res_bytes, ctypes.POINTER(SomeStruct)).contents
我觉得这可能是某种引用计数的问题,但我不太确定。为什么会出现这个问题呢?还有,使用ctypes时,正确的方式是什么来转换一个bytearray实例?
使用的python版本是3.4.0,x64。
1 个回答
3
以下的回答对我很有帮助:
关于在分配更多内存时,Python ctypes 结构被覆盖的问题
class SomeStruct(ctypes.Structure):
_fields_ = [
('field', ctypes.c_char)
]
res = bytearray(b'12345')
ctypes.cast(ctypes.create_string_buffer(bytes(res)), ctypes.POINTER(SomeStruct)).contents