在python中将ctypes结构转换为bytearray

2024-01-11

有没有办法转换 Ctypes 结构,包括指向字节数组的指针?

class SRamAccess(ctypes.Structure):
    _fields_ = [('channel', ctypes.c_uint), ('offset', ctypes.c_uint), ('len', ctypes.c_uint), ('data', ctypes.c_char_p)]

只需将其传递给bytearray():

>>> import ctypes
>>> class SRamAccess(ctypes.Structure):
...  _fields_ = [('channel', ctypes.c_uint), ('offset', ctypes.c_uint), ('len', ctypes.c_uint), ('data', ctypes.c_char_p)]
...
>>> s = SRamAccess(1,2,3,b'blah')
>>> bytearray(s)
bytearray(b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xf0 .\x1a\xed\x01\x00\x00')
#           \______________/\______________/\______________/\______________/\________________________/
#                   1               2               3         padding          pointer64 

请注意,“blah”不是结构的一部分。最后 8 个字节(64 位 Python)是指针地址,前面的 4 个字节用于填充,以将 8 字节指针与结构中的 8 字节偏移量对齐。

您需要结构中的一个数组才能查看数组内容:

>>> class SRamAccess(ctypes.Structure):
...  _fields_ = [('channel', ctypes.c_uint), ('offset', ctypes.c_uint), ('len', ctypes.c_uint), ('data', ctypes.c_char * 5)]
...
>>> s = SRamAccess(1,2,3,b'blah')
>>> bytearray(s)
bytearray(b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00blah\x00\x00\x00\x00')
#           \______________/\______________/\______________/\______/\__________/
#                   1               2               3         blah    padding

请注意,最后 3 个字节是填充,以使整个结构的大小成为 4 字节的倍数,因此此类结构的数组使 4 字节整数在 4 字节边界上保持对齐。

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

在python中将ctypes结构转换为bytearray 的相关文章

  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 如何在Python中并行处理列表? [复制]

    这个问题在这里已经有答案了 我写了这样的代码 def process data create file using data all data1 data2 data3 我想在我的所有列表上并行执行处理函数 因为它们正在创建小文件 所以我不
  • npm - EPERM mkdir:Windows 上不允许操作

    我正在使用 Node js 11 13 0 和 npm 6 0 以上 我尝试通过以下命令在 Windows 中设置 React js 应用程序 npx 创建反应应用程序新应用程序 输出如下 错误 EPERM 不允许操作 mkdir C Us
  • 非法配置:不再支持编译iOS 7之前的IB文档

    我最近更新到XCode 9 当我构建应用程序时它说 非法配置 我的 pod 文件中的一些故事板 我尝试重新创建故事板文件 但没有帮助 XCode 9 将不支持为低于 7 的 iOS 版本构建的故事板 尝试改变构建用于 in 文件检查器到更高
  • 带有默认参数的Python函数参数[重复]

    这个问题在这里已经有答案了 我是Python新手 我想定义一个函数from and to日期 如果我用一个参数调用该函数 它应该将该参数视为to日期 如果我传递两个参数 它应该分配from and to date 我定义如下 def ini
  • 从更新函数触发操作

    有一个希望很简单的问题 当我在更新函数中收到操作 A 时 我想返回一个执行某些操作的任务 然后生成操作 B 更新函数再次接收该操作 B 据我了解 从 Update 返回的任何效果都将由 startapp 执行 但似乎什么也没有发生 这是一个
  • 你能在 TypeScript 中创建嵌套类吗?

    有没有办法在 TypeScript 中嵌套类 例如 我想像这样使用它们 var foo new Foo var bar new Foo Bar 在现代 TypeScript 中 我们有类表达式 您可以使用它来创建嵌套类 例如 您可以执行以下
  • django sekizai {% addtoblock %} 标签无法正常工作

    我正在尝试实现 django sekizai 应用程序 它正在复制我添加的 js 文件 基本模板 load sekizai tags render block my js 使用此基础的模板 load sekizai tags div add
  • 如何获取 AngularJS 中可用模块的列表?

    在定义 Angular 模块时 我定义了我的依赖项 如下所示 var myModule angular module MyModuleName Dep1 Dep2 Dep3 每个依赖项都有自己的依赖项 指令 控制器等 有没有办法询问 Ang
  • 如何在网格中显示菜单 - ExtJS 5?

    我正在尝试在网格面板中显示菜单 我有一个操作列来显示一个图标 我想应用一个效果 当鼠标悬停在该图标上时 将显示一个菜单 我如何在 extjs 5 中做到这一点 我的行动栏是这样的 xtype actioncolumn width 70 it
  • Chronos 不运行作业

    我已经为每个服务使用 Docker 映像设置了 Mesos 集群 包括 Marathon 和 Chronos 我使用的 Docker 镜像如下 动物园管理员 jplock zookeeper 3 4 5 https registry hub
  • 将所有文件和文件夹从一个目录复制到另一个目录 PHP

    我有一个名为 mysourcedir 的目录 它包含一些文件和文件夹 所以我想使用 PHP 将此目录中的所有内容复制到 Linux 服务器上的其他 目标文件夹 function full copy source target if is d
  • SQL Server年份

    将 FINANCIALYEAR 声明为 varchar 30 将 FINALFINANCIALYEAR 声明为 int SELECT FINANCIALYEAR CONVERT VARCHAR YEAR GETDATE 2 CONVERT
  • 使用 MySqlDataAdapter 更新不起作用

    我正在尝试使用 MySqlDatAdapter 来更新 MySql 表 但是 该表永远不会更新 我以前这样做过 但使用的是 SQL Server 我的代码中还缺少其他特定于 MySql 的内容吗 DataTable myTable new
  • OpenMP“master”编译指示不得包含在“parallel for”编译指示内

    为什么英特尔编译器不允许我指定 openmp 中的某些操作parallel for块应该仅由主线程执行吗 如果没有这种功能 我该如何实现我想要实现的目标 我想做的是通过并行回调更新进度条 long num items computed 0
  • 如何在 emacs-ess 中从 R 内部访问 bash 环境变量

    在我的 bashrc 中 我有以下行 export SETTINGS home user settings xml 如果我在 bash 中加载 R 我可以使用Sys getenv功能 Sys getenv SETTINGS home use
  • sqlplus:加载共享库时出错:libsqlplus.so:无法打开共享对象文件:没有这样的文件或目录

    请提出解决此问题的解决方案 下达命令时 sqlplus nolog 发生的错误 sqlplus error while loading shared libraries libsqlplus so cannot open shared ob
  • 如何使用Luigi持续更新目标文件?

    我最近开始玩Luigi 我想了解如何使用它不断地将新数据附加到现有的目标文件中 想象一下 我每分钟都会 ping 一个 api 来检索新数据 因为一个Task仅在以下情况下运行Target尚不存在 一个简单的方法是通过当前参数来参数化输出文
  • 如何在 Google Maps API 中的完全相同的坐标处渲染多个标记?

    我在同一条街上有多个地址 门牌号相同 但公寓号不同 Google 地图地理编码服务 v2 对于许多地址来说并没有达到公寓级别的精度 只是返回了与它们完全相同的地理编码坐标 所以问题是 当我去显示它们时 无论放大多少 都只显示一个图钉 我的问
  • 将 ActionScript 日期从 UTC 转换为本地时间(以纪元为单位)

    这是我的后续行动上一个问题 https stackoverflow com questions 11632421 creating actionscript date object from mysql utc timestamp stri
  • 在python中将ctypes结构转换为bytearray

    有没有办法转换 Ctypes 结构 包括指向字节数组的指针 class SRamAccess ctypes Structure fields channel ctypes c uint offset ctypes c uint len ct