gpt4 book ai didi

c++ - 将结构信息放入一个大数组中

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:01 25 4
gpt4 key购买 nike

我正在寻找一种将整个结构信息放入数组的方法。这样做的原因是我正在使用的函数需要读取一组信息。我不想调用此函数 X 次,其中 X 是我在结构中拥有的字段数,而是想将整个信息 block 放入一个数组中,然后将其发送以进行写入。

这就是我的想法:

typedef struct
{
short powerLevel[100];
short unitInfo[4];
short unitSN[6];
} MyDeviceData;

int main()
{
MyDeviceData *devicePtr;
MyDevieData deviceObject;

short structInfo[sizeof(MyDeviceData) / sizeof(short)];

//put all of MyDeviceData arrays into single array structInfo
????????

//call function with new array that has all the structs information

/* do stuff */

至少这是在正确的方向上吗?

编辑!!:好的,我确定了以下解决方案,以防其他人将来遇到这个问题。希望它不会太糟糕:

//memcpy struct values into appropriately sized array. Used + 1 to advance 
//pointer so the address of the pointer was not copied in and just the relevant
//struct values were

memcpy(structInfo, &dataPointer + 1, sizeof(MyDeviceData);

//If not using pointer to struct, then memcpy is easy

memcpy(structInfo, &deviceObject, sizeof(deviceObject));

注意事项正如 chrisaycock 和 Sebastian Redl 已经提到的那样,适本地进行位打包并确保数组初始化使用可移植代码来确保其大小正确以保存结构信息。

最佳答案

您对 structInfo 数组的大小计算并不是真正可移植的 - 尽管在实践中这不太可能,但 MyDeviceData 的成员之间可能存在填充。

short structInfo[100 + 4 + 6];
memcpy(structInfo, devicePtr->powerLevel, 100*sizeof(short));
memcpy(structInfo + 100, devicePtr->unitInfo, 4*sizeof(short));
memcpy(structInfo + 100 + 4, devicePtr->unitSN, 6*sizeof(short));

这是可移植的。除此之外的任何东西都可能不是。如果你有一些常量来替换那些神奇的数字当然会很好。

关于c++ - 将结构信息放入一个大数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com