首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从混合器的特定内存位置读取数据(结构)

从混合器的特定内存位置读取数据(结构)
EN

Stack Overflow用户
提问于 2013-03-02 15:45:49
回答 2查看 405关注 0票数 0

我正在尝试为blender (免费3d程序)做一个插件,这个插件是一个python插件,我会将数据传递给c++来做繁重的计算

在python中,该方法如下所示:

代码语言:javascript
运行
复制
data.as_pointer()
#.. method:: as_pointer()
#Returns the memory address which holds a pointer to blenders internal data
#:return: int (memory address).
#:rtype: int
#.. note:: This is intended only for advanced script writers who need to
#pass blender data to their own C/Python modules.

我读到的数据是一个列表

代码语言:javascript
运行
复制
>>>>data[0].as_pointer()
152884792
>>>>data[1].as_pointer()
152884992
>>>>data[2].as_pointer()
152885192

依此类推,因此项目大小为200字节,具有未知的结构

如何在c++中读取此数据

EN

回答 2

Stack Overflow用户

发布于 2013-03-02 15:50:02

你必须知道格式。这样做之后,您可能就可以创建一个struct并将此指针强制转换为struct类型并读取它。

编辑:我相信blender有一个API可以做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2013-03-02 21:39:10

我到目前为止所做的工作,以及它如何很好地确定哪些数据是哪些数据,+将数据与python内部数据进行比较

c++代码:

代码语言:javascript
运行
复制
unsigned int p = imported_data; /*mypointer address*/

float* value_float;
unsigned int* value_int;
double* value_double;
char* value_char;
bool* value_bool;

for (int looper = 0;looper <200;looper +=4)
{
    value_float = reinterpret_cast<float *>(p + looper);
    if(*value_float != 0.0f){
        printf("%i value_float = %f\n", looper, *value_float);
        continue;
    }
    value_int = reinterpret_cast<unsigned int *>(p + looper);
    if(*value_int != 0){
        printf("%i value_int = %u\n", looper, *value_int);
        continue;
    }
    value_double = reinterpret_cast<double *>(p + looper);
    if(*value_double != 0.0){
        printf("%i value_double = %f\n", looper, *value_double);
        continue;
    }
    value_char = reinterpret_cast<char *>(p + looper);
    if(*value_char != NULL){
        printf("%i value_char = %c\n", looper, *value_char);
        continue;
    }
    value_bool = reinterpret_cast<bool *>(p + looper);
    if(*value_bool != 0){
        printf("%i value_char = %i\n", looper, *value_bool);
        continue;
    }
}

结果如下:

代码语言:javascript
运行
复制
0 value_float = 2.784583
4 value_float = 2.088116
8 value_float = -3.057968
16 value_double = -15656.531250
20 value_float = -6.455599
24 value_float = 1.000000
48 value_double = 134217728.000000
52 value_float = 20.000000
56 value_float = 2.784583
60 value_float = 2.088116
64 value_float = -2.807592
72 value_double = -9227.453125
76 value_float = -6.063199
80 value_float = 1.000000
104 value_double = 100663296.000000
108 value_float = 19.000000
136 value_double = 0.007813
140 value_float = 1.000000
144 value_float = 50.000000
148 value_float = 51.000000
152 value_float = 0.000000
156 value_float = -1.#QNAN0
160 value_float = 0.713105
164 value_float = 0.023383
168 value_float = 0.014281
172 value_float = 0.249231
176 value_double = 0.000000
180 value_float = 0.050000
192 value_double = 0.000000
196 value_float = 0.000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15172116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档