使ctype char / char数组和派生的char / char数组行为相似

时间:2015-02-28 01:27:13

标签: python python-2.7 ctypes

我正在更新包含ctypes.c_charctypes.c_char数组字段的ctype结构,现在使用派生类型。为了使用户更容易,我想使包含这些c_char字段的ctype结构与其他ctype数组一样。例如,当访问ctypes.c_ubyte * 5数组时,用户仍然可以访问ctype数组,但是当访问ctypes.c_char * 5数组时,您只能获得Python字符串。

以下是我的一些示例结构:

import ctypes
class chr(ctypes.c_char):
    pass

class str(ctypes.Array):
    _type_ = chr
    _length_ = 5

class old_struct(ctypes.Structure):
    _fields_ = [('str', ctypes.c_char * 5), ('char', ctypes.c_char)]

class new_struct(ctypes.Structure):
    _fields_ = [('str', str), ('char', chr)]

访问这些字段时,我得到:

old = old_struct()
print old.str         # ''
print old.char        # '\x00'

new = new_struct()
print new.str         # ''
print new.char        # <chr object at ...>
print new.char.value  # '\x00'

我将如何使new.str行为像现在一样,但也包含value数据库,当访问时返回包含的Python字符串。如果用户访问new.str而未指定value(即new.str.value),我还希望显示弃用警告。 我还希望new.charold.char一样用于向后兼容,但也保留其当前功能。如果用户在未指定new.char(即value)的情况下访问new.char.value,我希望显示弃用警告。

0 个答案:

没有答案