是否可以通过 ctypes 通过引用传递 python 字符串?

2023-11-26

抱歉,但我通常很难阅读当前的 ctypes 文档......

如果我有一个 C 函数需要const char *指针,而我know它既不会修改传入的字符串,也不会在函数调用之外保留对它的引用,直接将指针传递给 python 字符串的字节确实很有意义。

ctypes 可以做到这一点还是只是不支持?我真的必须这样做吗create_string_buffer并将我的字符串复制到其中?


为指针类型 c_char_p、c_wchar_p 和 c_void_p 的实例分配新值会更改它们指向的内存位置,而不是内存块的内容(当然不是,因为 Python 字符串是不可变的):

>>> s = "Hello, World"
>>> c_s = c_char_p(s)
>>> print c_s
c_char_p('Hello, World')
>>> c_s.value = "Hi, there"
>>> print c_s
c_char_p('Hi, there')
>>> print s                 # first string is unchanged
Hello, World
>>>

不过,您应该小心,不要 将它们传递给期望的函数 指向可变内存的指针。如果你 需要可变内存块,ctypes 有 create_string_buffer 函数 以各种方式创造这些。这 当前内存块内容可以是 使用原始数据访问(或更改) 属性,如果你想访问它 NUL 结尾的字符串,使用该字符串 财产:

ctypes 教程说。我从中得到的是,只有当该函数可以与const char*,传入 python 字符串是否有效。请记住,它不会有空终止。

我建议使用create_string_buffer anyhow.

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

是否可以通过 ctypes 通过引用传递 python 字符串? 的相关文章

随机推荐

  • Opengls eglCreateWindowSurface GL 错误 EGL_BAD_ALLOC

    我正进入 状态eglCreateWindowSurface GL Error EGL BAD ALLOC在三星 Galaxy S6 中安装后首次打开应用程序时 相同的代码在其他设备中运行良好 我尝试清理内存并销毁纹理并在销毁时取消初始化所有
  • 无法在 64 位 Linux 上构建 32 位 Wine

    我正在尝试这样做 使用 automake 配置脚本在 64 位 Linux 上构建 32 位 对我不起作用 编译酒 我在 config log 中找到了这个 configure failed program was confdefs h d
  • 使用 Python 处理 MySQL 未读结果

    我使用 mysql connector 进行 SQL 操作 我有一个简短的脚本 它在光标上执行以下操作 字符串 cursor execute use format db show tables command ALTER TABLE Obj
  • 使用 Array.CreateInstance 和 new 运算符实例化数组的区别

    我可以看到以下两种在 C 中实例化 int 数组的方法 通过 API系统 数组抽象类 var arrayInstance Array CreateInstance typeof int 4 通过各种数组初始化语法 var arrayInst
  • PHP 中的自动图像格式检测

    我正在寻找一种方法来获取当前放置在临时位置的用户上传的图像 例如 tmp jkhjkh78 并从中创建 php 图像 自动检测格式 有没有比一堆尝试 捕获 jpeg 图像 png 图像等更聪明的方法来做到这一点 这是的功能之一获取图像大小
  • iPhone 上的内嵌 html5 视频

    我想在 iPhone 上播放 HTML5 视频 但每当我尝试播放时 当调用视频 play 时 iPhone 都会自动弹出全屏 如何在 iPhone 不改变 UI 的情况下内嵌播放视频 如下所示 http www easy bits com
  • 使用 kubernetes 执行器时 Airflow-dag_id 无法找到问题

    我正在使用气流稳定的 Helm Chart 并使用 Kubernetes Executor 正在为 dag 安排新的 pod 但它因 dag id 无法找到问题而失败 我正在使用 git sync 来获取 dags 以下是错误和 kuber
  • UITableViewCell 圆角和剪辑子视图

    我在任何地方 搜索引擎 文档 此处等 都找不到任何内容来显示如何在也剪辑子视图的元素上创建圆角 尤其是在分组表视图中 我有代码可以正确地从具有 4 个弧 圆角 的路径创建一个圆角矩形 该代码已在我的子类 uitableviewcell 中的
  • 在 PHP 中处理格式错误的 JSON

    我正在尝试编写一个 php 脚本来处理来自以字符串形式提供 json 的 Web 服务的数据 问题是字符串并不是真正的 json 这是 JavaScript 具体来说 尽管变量被引用 但键未被引用 示例 实际数据更长且更复杂 desc Us
  • 无法读取 CFPrefsPlistSource iOS 10 中的值

    我今天已将 Xcode 8 更新到 beta 2 并尝试在 App 和 Today Extension 之间共享数据 我面临着这个日志警告 2016 07 08 18 00 24 732472 ProjetctX 941 42801 用户默
  • Junit:为删除实体的方法编写测试?

    最会是什么详尽的我可以为以下代码编写测试吗 public void deleteFromPerson person person person personRepository returnPerson person getId perso
  • 如何将字节数组转换为字符串,反之亦然?

    我必须在 Android 中将字节数组转换为字符串 但我的字节数组包含负值 如果我再次将该字符串转换为字节数组 我得到的值将与原始字节数组值不同 我该怎么做才能获得正确的转换 我用来进行转换的代码如下 Code to convert byt
  • 在 Grafana 仪表板中嵌入网站

    我运行 Grafana 7 2 0 开源版 需要将网站嵌入仪表板本身 也就是说 我需要一排或两排常用的图表面板 并在它们下面嵌入一个需要定期重新加载的外部网站 我怎样才能实现这个目标 貌似没有相关插件https grafana com gr
  • 使用 python selenium 和 Firefox 或 Chrome headless 截取整个页面的屏幕截图

    这篇文章与此相关 Python selenium 屏幕截图无法获取整个页面 PhantomsJS 的解决方案似乎有效 driver webdriver PhantomJS driver maximize window driver get
  • jQuery.Validation.Unobtrusive 客户端验证仅在脚本位于视图页面上时有效

    我有一个ASP NET MVC 4 应用程序使用的是jQuery validation js插件和 MVCjQuery validation unobtrusive js 我在视图模型上使用数据注释来验证文本框的输入是否为整数 此 嵌套 视
  • 找出Python中的正则表达式在字符串中匹配了多少次

    有没有办法可以找出Python字符串中有多少个正则表达式的匹配项 例如 如果我有字符串 It actually happened when it acted out of turn 我想知道多少次 t a 出现在字符串中 在那串字符串中 t
  • SwiftUI iOS - 如何捕获硬件按键事件

    我是 iOS 开发新手 按照教程 我使用 SwiftUI 创建了一个简单的计算器 我的 iPad 连接了键盘 我希望能够使用键盘输入值 如何在 SwiftUI 应用程序 没有文本字段 中捕获和处理硬件键盘事件 我尝试在 SceneDeleg
  • YouTube API 和品牌帐户

    很长一段时间以来 我一直在使用 Google 脚本来访问我的 YouTube 频道 从中获取和修改一些信息 并将一些数据保存在 Google 表格中 它总是工作得很好 但大约一周前 谷歌以某种方式在我的普通帐户 主电子邮件 和我的 YouT
  • 如何在 R 中将 html 输出捕获为 png

    我使用 R 中的 networkD3 包创建的交互式输出 我知道如何将输出保存为 html 页面 但我还需要将图表的 静态 版本保存为 png 文件 代码如下所示 Load package library networkD3 Create
  • 是否可以通过 ctypes 通过引用传递 python 字符串?

    抱歉 但我通常很难阅读当前的 ctypes 文档 如果我有一个 C 函数需要const char 指针 而我know它既不会修改传入的字符串 也不会在函数调用之外保留对它的引用 直接将指针传递给 python 字符串的字节确实很有意义 ct