如何从 ctypes 结构或联合字段获取“类型”字段描述符

2023-11-23

我有一个具有不同数据类型字段的结构。我想迭代结构字段,检查数据类型,并为字段设置适当的值。

我可以通过字段的 .size 和 .offset 属性访问字段的大小和偏移量。如何获取字段的“类型”属性?使用类型(值)不打印特定字段的 ctypes 数据类型。如果我打印值然后我确实看到了 ctypes 数据类型,但似乎没有可以直接访问它的属性。

如何直接访问类型字段描述符?

from ctypes import *

class A(Structure):
    _fields_ = [("one", c_long),
                ("two", c_char),
                ("three", c_byte)]

>>> A.one
<Field type=c_long, ofs=0, size=4>
>>> A.one.offset
0
>>> A.one.size
4
>>> type(A.one)
<class '_ctypes.CField'>

理想情况下,我希望获得类似于下面的代码片段的字段类型......

>>> A.one.type
c_long

ctypes API 似乎不支持此功能。当。。。的时候Field repr <Field type=c_long ..>创建后,会从嵌入类型中检索名称,如下所示:

name = ((PyTypeObject *)self->proto)->tp_name;

对于您所在领域的会员self->proto指着c_long,但我在 Python 2.7 中找不到位置cfield.c您可以在其中检索值self->proto本身。您可能被迫:

  1. 创建您自己的映射name -> type.
  2. (恶心)解析代表<Field type=X并使用getattr(ctypes, X)获取类型对象。

只是为了跟进一个例子选项1),这是一个类装饰器,它为您创建类型映射,添加_typeof(cls, fld)类方法:

from ctypes import *

def typemap(cls):
    _types = dict((getattr(cls, t), v) for t, v in cls._fields_)
    setattr(cls, '_typeof', classmethod(lambda c, f: _types.get(f)))
    return cls

@typemap
class A(Structure):
    _fields_ = [("one", c_long),
                ("two", c_char),
                ("three", c_byte)]

print A._typeof(A.one), A._typeof(A.two), A._typeof(A.three)

Result:

<class 'ctypes.c_long'> <class 'ctypes.c_char'> <class 'ctypes.c_byte'>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 ctypes 结构或联合字段获取“类型”字段描述符 的相关文章

  • Google App Engine queue.yaml 无法在开发服务器中工作

    我无法让 dev appserver py 识别我使用queue yaml 创建的自定义队列 他们没有出现在http localhost 8000 taskqueue http localhost 8000 taskqueue 当我尝试向其
  • 递归 lambda 表达式可能吗?

    我正在尝试编写一个调用自身的 lambda 表达式 但我似乎找不到任何语法 或者即使它是可能的 本质上我想将以下函数传输到以下 lambda 表达式中 我意识到这是一个愚蠢的应用程序 它只是添加 但我正在探索可以在 python 中使用 l
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • sklearn 中的 pca.inverse_transform

    将我的数据拟合后 X 我的数据 pca PCA n components 1 pca fit X X pca pca fit transform X 现在 X pca 具有一维 当我根据定义执行逆变换时 它不是应该返回原始数据 即 X 二维
  • Pandas:如果单元格包含特定文本则删除行

    pandas 中的这段代码不起作用 如果该列包含提供的任何文本 数字 我希望它删除该行 目前 我只能在单元格与我的代码中传递的确切文本匹配时才能使其工作 因为它只删除显示 Fin 的单元格不是金融或金融 df2 df df Team Fin
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • 使用 python 绘制正值小提琴图

    我发现小提琴图信息丰富且有用 我使用 python 库 seaborn 然而 当应用于正值时 它们几乎总是在低端显示负值 我发现这确实具有误导性 尤其是在处理现实数据集时 在seaborn的官方文档中https seaborn pydata
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • 返回表示每组内最大值的索引的一系列数字位置

    考虑一下这个系列 np random seed 3 1415 s pd Series np random rand 100 pd MultiIndex from product list ABDCE list abcde One Two T
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • Python SSL X509:KEY_VALUES_MISMATCH

    Python HTTPS server from http server import HTTPServer SimpleHTTPRequestHandler import ssl https stackoverflow com a 408
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐

  • 如何在 Magento 中找到合适的事件?

    有时 当寻找方便的事件来挂钩时 我会进行一些探索性编程 Modify Mage dispatchEvent加上这个额外的行 Mage log name implode array keys data 标记一个我知道我无法更快捕捉到的起点 M
  • 如何将浮点数舍入到给定精度?

    我需要一种方法将浮点数四舍五入到给定的小数位数 但我希望始终向下舍入 例如 代替 gt gt gt round 2 667 2 2 67 我宁愿 gt gt gt round down 2 667 2 2 66 你有一个朋友在quantiz
  • 如何在 Access 中“链接”链接表?

    我的场景 计算机 A 有一个包含链接表的 Access 数据库 这些链接表实际上驻留在计算机 B 上的另一个 Access 数据库中 还没有什么异常 现在我们创建一个 SQL Server 数据库 并与计算机 B 上的 Access 数据库
  • 当我的类具有静态成员时,为什么我的 C++ 程序无法链接?

    我有一个名为 Stuff 的小类 我想在其中存储东西 这些东西是 int 类型的列表 在我使用的任何类中的整个代码中 我希望能够访问 Stuff 类中的这些内容 主要 cpp include Stuff h int main Stuff t
  • SweetAlert 下拉列表动态添加列表中的项目

    我目前正在使用 sweetalert2 从对话框中捕获用户的输入 我想在链接队列对话框中使用下拉菜单 但我似乎找不到在下拉列表中动态添加项目的方法 假设我想从 JSON 格式检索数据并将其放入下拉列表中 有没有办法做到这一点 functio
  • 如何修复 PlotlyRequestError?

    当我执行代码时 我收到 PlotlyRequestError 无消息 import plotly import plotly plotly as py import plotly graph objs as go Filedata pd r
  • 计算两行之间的时间差

    我正在尝试使用计算两行之间的时间差shift 但我收到意外错误 我可能遗漏了一些明显的东西 df Delta df index df index shift 1 该语句产生一个ValueError Cannot shift with no
  • 在 UIView 上使用 CAGradientLayer 绘制渐变不起作用

    我试图在视图控制器的背景视图上绘制渐变 但由于某种原因我无法让它工作 这是我的方法 它是从viewDidLoad void drawGradient CAGradientLayer gradient CAGradientLayer laye
  • 移动应用程序中的 OAuth 机密

    使用 OAuth 协议时 您需要从要委托的服务获取秘密字符串 如果您在网络应用程序中执行此操作 则可以简单地将机密存储在数据库或文件系统中 但在移动应用程序 或桌面应用程序 中处理它的最佳方法是什么 将字符串存储在应用程序中显然不好 因为有
  • 如何获取 Document 目录中目录的 URL 路径?

    如何获取文档目录中特定目录的 url 路径 like Document Art My code NSURL localRoot if localRoot nil return localRoot NSArray paths NSFileMa
  • 带有模板参数的 Lambda 函数,而不是函数参数

    为什么第一次调用不能编译 auto get1
  • 删除“DerivedData”后,Xcode 将不会添加“嵌入式二进制文件”

    辅助搜索的替代标题 在 Xcode 中添加嵌入式二进制文件失败 Xcode 不会从单独的项目链接框架 由于缺少框架 应用程序在设备上崩溃 但在模拟器中运行 Overview 删除 DerivedData 文件夹 或执行 产品 gt 清理 后
  • 忽略 Dapper 中的属性

    In Dapper 有没有办法忽略模型类中的属性 即使用Insert扩展方法 我的模型类有一组computed未保留在关联表中的属性 好吧 Dapper 没有Insert扩展方法 即在 dapper contrib dapper exten
  • 在 Flutter 中使用 Google fit API

    我需要我的应用程序从 Google Fit 读取步数 我正在使用 health 3 05 包 现在我复制了示例代码以查看它是否有效 不幸的是它无效 当然 我执行了这个包自述文件中的每一步 我设置了 OAuth2 客户端 ID 我更改了 gr
  • 如何在 VSCode 中查看大型打字稿类型?

    我有一个像这样的大型类型 type Large foo 123 bar 123 baz 123 foo 123 bar 123 baz 123 foo 123 bar 123 baz 123 foo 123 bar 123 baz 123
  • 从 PHP MySQL 中的逗号分隔字符串中查找精确值

    我有一个产品表 其中包含一个名为 类别 的字段 用于将产品相关的类别 ID 保存为逗号分隔值 我正在使用正则表达式从类别中搜索产品 假设有一条记录包含4 24 1 31我的表情是 WHERE categories REGEXP 4 但这会返
  • TypeScript 是否为 NodeJS 模块访问提供显式公共 API?

    从节点应用程序中我想做的事情 var typeScript require typescript typeScript compile 我希望将编译器实现到构建系统中 但如果无法访问公共 API typescript compile 等 这
  • 何时使用 enumerateObjectsUsingBlock 与 for

    除了明显的差异之外 Use enumerateObjectsUsingBlock当您同时需要索引和对象时 Don t use enumerateObjectsUsingBlock when you need to modify local
  • 如何更改android spinner popupBackground

    我试图通过设置 android popupBackground 来更改 android spinner 弹出窗口背景 但它没有任何效果 我有什么办法可以改变它吗
  • 如何从 ctypes 结构或联合字段获取“类型”字段描述符

    我有一个具有不同数据类型字段的结构 我想迭代结构字段 检查数据类型 并为字段设置适当的值 我可以通过字段的 size 和 offset 属性访问字段的大小和偏移量 如何获取字段的 类型 属性 使用类型 值 不打印特定字段的 ctypes 数