繁体   English   中英

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

[英]Casting data array to compatible struct

我的情况是我的代码以一长串floats的形式从我无法控制的地方接收数据。

这些数字分配给各种功能

void myfunc(struct floatstruct* fs);

采用以下形式的结构:

struct floatstruct
{
    float a;
    float b;
    float c;
};

你明白了。

我想知道是否有一种方法可以安全地将浮点数floatstruct转换为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个新浮标除非你计划在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);
}

联盟可能是你需要的:

#pragma pack(sizeof(float))
struct mystruct1
{
    float a;
    float b;
    float c;
};

struct mystruct2
{
    float x;
    float y;
};
#pragma pack()

typedef union
{
   mystruct1 struct1;
   mystruct2 struct2;
}structsUnion;

void myfunc1(structsUnion* values)
{
    values->struct1.a; // to access members
}
void myfunc2(structsUnion* values)
{
    values->struct2.x; // to access members
}

void process_data(float* numbers)
{
    myfunc1((structsUnion*)(numbers));
    myfunc2((structsUnion*)(numbers));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM