我的代码以一长串 floats
的形式从我无法控制的地方接收数据。
这些数字被分配给各种功能
void myfunc(struct floatstruct* fs);
采用以下形式的结构:
struct floatstruct
{
float a;
float b;
float c;
};
你明白了。
我想知道是否有一种方法可以将 float 数组安全地转换为 floatstruct
,从而将数据直接传递给 myfunc
。如有必要,我可以将对齐属性添加到 floatstruct
。
所需行为的示例:
struct mystruct1
{
float a;
float b;
float c;
};
struct mystruct2
{
float x;
float y;
};
extern void myfunc1(mystruct1*);
extern void myfunc2(mystruct2*);
void process_data(float* numbers)
{
myfunc1((struct mystruct1*)numbers);
myfunc2((struct mystruct2*)(numbers + 3));
}
理想的解决方案肯定是更改系统。但我正在寻找给定参数范围内的解决方案。
最佳答案
这是我会做的,考虑到你的特殊要求:(我这样说是因为在这里或那里有 3 个新的 float 几乎没有明显的区别,除非你打算在 arduino 或手机上使用它,或者如果你打算有几十个成千上万...)
无论如何:
struct floatstruct
{
float (*a[3]);
};
{
int i;
struct floatstruct aStruct;
struct floatstruct bStruct;
float *num = numbers;
for (i = 0; i < 6; i++) {
if (i < 3)
aStruct.a[i] = num;
else
bStruct.a[i-3] = num;
num++;
}
myfunc1(&aStruct);
myfunc2(&bStruct);
}
关于将数据数组转换为兼容的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30236877/