Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在ctypes中强制转换bytearray实例_Python_Ctypes - Fatal编程技术网

Python 在ctypes中强制转换bytearray实例

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

在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。

以下答案有帮助:

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