将数据数组转换为兼容的结构

标签 c arrays struct casting memory-alignment

我的代码以一长串 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/

相关文章:

c - pragmaatomic 的无效形式

c++ - sprintf 引起的 exc_bad_access

c++ - int main()的返回值是什么意思,如何显示?

c++ - 如何初始化或更改类中数组内的值?

c++ - c++中多项式的乘法

c# - 'locate' C# 结构在哪里?/如何在项目中组织结构

c - C中结构成员值的自赋值

Python:For 循环列表给出 IndexError

c++ - 如何在 C++ 类中使用模板化结构

c++ - 0xC0000005 : Access violation reading location 0x00000004