You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不通过检查__name__字符串判断Python c_ubyte_Array类型

ctypes c_ubyte数组类型判断解决方案

所有ctypes数组类型都继承自公开的ctypes.Array基类,且每个数组类型都内置_type_属性指向其元素的类型,你可以组合这两个特征完成isinstance校验,完全替代字符串匹配逻辑。

修改后的可运行代码如下:

from ctypes import LittleEndianStructure, c_ubyte, Array

class Mystruct(LittleEndianStructure):
    _fields_ = [
        ('field1', c_ubyte * 5),
    ]

    def to_dict(self):
        d = dict((field, getattr(self, field)) for field, _ in self._fields_)
        for field in d:
            val = d[field]
            # 核心校验逻辑,无字符串匹配
            if isinstance(val, Array) and type(val)._type_ is c_ubyte:
                d[field] = ''.join([f'{x:02x}' for x in val])
        return d

x = Mystruct.from_buffer_copy(b'AAAAAAAAA')
print(x.to_dict())

逻辑说明

  • 第一层isinstance(val, Array)过滤出所有数组类型的字段,适配任意长度的数组
  • 第二层type(val)._type_ is c_ubyte确认数组元素为无符号字节类型,不会误识别其他类型的数组

内容的提问来源于stack exchange,提问作者mrkbutty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:27:04