- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用python
做一些实验(意味着 python3
)用于准备数据(也将它们发送到有线 - SPI)显示它很慢(系统有限)。所以我正在考虑创建用 C
编写的扩展模块将关键的事情推迟到。我想要:
python
脚本将有权访问 malloc()
创建的内存块在扩展模块中希望可以透明地转换为 bytearray
bytearray
的指针在 python
创建的对象希望可以透明地转换为 void *
目标是零复制也可作为 python
均可访问的零转换内存块。 (如 bytearray
)和扩展模块(如 void *
)。
有什么方法,如何实现这一点吗?
最佳答案
好吧,看起来比想象的要简单;-)
bytearray
提供对访问底层内存块的直接支持,这正是我们所需要的bytearray
对象C 扩展模块 [test.c
]:
#include <Python.h>
#include <stdint.h>
/* Forward prototype declaration */
static PyObject *transform(PyObject *self, PyObject *args);
/* Methods exported by this extension module */
static PyMethodDef test_methods[] =
{
{"transform", transform, METH_VARARGS, "testing buffer transformation"},
{NULL, NULL, 0, NULL}
};
/* Extension module definition */
static struct PyModuleDef test_module =
{
PyModuleDef_HEAD_INIT,
"BytearrayTest",
NULL,
-1,
test_methods,
};
/*
* The test function
*/
static PyObject *transform(PyObject *self, PyObject *args)
{
PyByteArrayObject *byte_array;
uint8_t *buff;
int buff_len = 0;
int i;
/* Get the bytearray object */
if (!PyArg_ParseTuple(args, "Y", &byte_array))
return NULL;
buff = (uint8_t *)(byte_array->ob_bytes); /* data */
buff_len = byte_array->ob_alloc; /* length */
/* Perform desired transformation */
for (i = 0; i < buff_len; ++i)
buff[i] += 65;
/* Return void */
Py_INCREF(Py_None);
return Py_None;
}
/* Mandatory extension module init function */
PyMODINIT_FUNC PyInit_BytearrayTest(void)
{
return PyModule_Create(&test_module);
}
C 扩展模块构建/部署脚本 [setup.py
]:
#!/usr/bin/python3
from distutils.core import setup, Extension
module = Extension('BytearrayTest', sources = ['test.c'])
setup (name = 'BytearrayTest',
version = '1.0',
description = 'This is a bytearray test package',
ext_modules = [module])
构建/安装扩展模块:
# ./setup.py build
# ./setup.py install
测试一下:
>>> import BytearrayTest
>>> a = bytearray(16); a
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
>>> BytearrayTest.transform(a); a
bytearray(b'AAAAAAAAAAAAAAAA')
>>>
关于c - 扩展模块: marshalling void * to bytearray (and/or vice versa),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959180/
我正在使用 opencv2 c++ 接口(interface)。 我想了解如何将颜色从标量转换为浮点数。我有一个这样的矩阵: d = Mat(src.rows, src.cols, CV_32F);
当我必须设置网页样式时,是从最外层元素开始向内继续还是相反,从内到外更好? 例如给予 .outer { width: 170px; ... ... }
我想根据键盘快捷键在 Youtube 上隐藏/显示一些 div。一旦隐藏了 div,我就可以隐藏它们,但不能显示它们。 // ==UserScript== // @name Youtu
使用python做一些实验(意味着 python3 )用于准备数据(也将它们发送到有线 - SPI)显示它很慢(系统有限)。所以我正在考虑创建用 C 编写的扩展模块将关键的事情推迟到。我想要: pyt
我最近在上一篇文章中解决了位图问题。现在我又遇到了另一个图像问题。这次是 PNG。 我正在使用 LibPng 来读取和写入 PNG 文件。我有一个包含每个像素的 BGRA 信息的结构。我知道像素以 R
无论如何都可以将 opencv mat 对象转换为 base64。 我使用下面的 url 进行 base64 编码和解码: http://www.adp-gmbh.ch/cpp/common/base
我正在尝试将哈希值转换为大整数,以便我可以用它进行一些计算。我在这方面取得了成功,但另一方面,我需要能够将大整数转换回哈希值以进行验证。但我无法成功转换回来,下面是我的代码和输出。请提供建议和协助..
我想知道如何在 PostgreSQL (9.4) 中轻松地在父表及其子表之间移动数据,反之亦然。 假设我设置了以下数据库示例: DROP TABLE IF EXISTS employee CASCAD
有没有办法将 Chronicle Queue 中的某个周期转换为时间戳?我检查了 4.5 apidocs 但没有找到任何东西。 最佳答案 周期数是自纪元以来的天数(或小时数)。如果你的纪元是0那么时间
String.prototype.swapCase = function() { for (var i = 0; i 输出仍然是 hello,没有应用大写。 我期待类似“Hello”.
如何将 int 从网络顺序转换为主机顺序(反之亦然)。在 cpp 中,它将是 ntohl 和 htonl。 最佳答案 使用 ByteData,这是一个 ... sequence of bytes th
如何将 pdf 文件转换为 byte[],反之亦然? 最佳答案 // loading bytes from a file is very easy in C#. The built in System
我使用 php 5.4.6 和 MySQL 5.5.29,我将 UNIX TIMESTAMP 转换为 MYSQL DATETIME 遇到了麻烦,反之亦然。 Mysql 和 php 在同一台本地机器上运
在 Visual Studio 中,我试图决定应该从哪种类型的应用程序开始。我想让它可以用于尽可能多的设备。 如果我制作一个 Windows 桌面应用程序 (.NET/WPF),我可以将其转换为 UW
我有一个表格行,想要在表格中获取一个单元格,例如: 1 2
虽然有很多关于 Kubernetes RBAC 的文档和示例以及不同资源的可用动词,但我找不到关于某些动词是否总是组合使用或是否有单独使用它们的用例的任何规则。特别是,我想知道动词 get、list
c#代码- 字符串 s="おはよう"; 我想将 s 发送到 c++ dll,作为 wstring.. 如何在c#中将字符串转换为wstring? 最佳答案 一个 std::wstring是一个 C++
这可能是一个重复的问题,但我一直无法找到解决方案。我有一些复杂的 java 对象,我想将它序列化为 json 字符串,然后我想将它从 GWT 客户端传递给 Rest Web 服务。为了调用其余 Web
我刚开始使用尺寸等级,虽然通常建议的方法似乎是开始使用 Any Any 尺寸等级,然后适应其他尺寸等级,但我从 Compact Regular 开始我的项目,现在当我转到 Any Any 时,我没有看
我正在添加一个新函数,如果它是上三角形,则将 DataFrame 转换为下三角形,反之亦然。我使用的数据总是有前两行只用第一个索引填充。 我尝试使用这个问题的解决方案 Pandas: convert
我是一名优秀的程序员,十分优秀!