Python 在ctypes中强制转换bytearray实例
在pycharm中开发时,当我运行覆盖率单元测试时,下面的代码有时会失败(转换结构的内容会发生变化),但在作为单元测试运行时则不会。以下是守则的相关部分:Python 在ctypes中强制转换bytearray实例,python,ctypes,Python,Ctypes,在pycharm中开发时,当我运行覆盖率单元测试时,下面的代码有时会失败(转换结构的内容会发生变化),但在作为单元测试运行时则不会。以下是守则的相关部分: class SomeStruct(ctypes.Structure): _fields_ = [ ('field', ctypes.c_char) ] res = bytearray(b'12345') ctypes.cast(bytes(res), ctypes.POINTER(SomeStruct)).c
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。以下答案有帮助:
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