我正在寻找一种将整个结构信息放入数组的方法。原因是我正在使用的函数需要读取一系列信息。而不是调用这个函数X的次数,其中X是我在结构中的字段数,我想将整个信息块放到一个数组中并发送它以便写入。
这就是我的想法:
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已经提到的注意事项,正在进行适当的打包并确保数组初始化正在使用可移植代码来确保其正确的大小以保存结构信息。
答案 0 :(得分:3)
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));
这是便携式的。除此之外的任何事情都可能不是。如果你有一些常数可以取代那些神奇的数字,那当然会很好。
答案 1 :(得分:0)
unsigned char structInfo[(100 + 4 + 6)*sizeof(short)];
unsigned char *tmpAddress = structInfo;
memcpy(tmpAddress , devicePtr->powerLevel, 100*sizeof(short));
tmpAddress +=100*sizeof(short);
memcpy(tmpAddress , devicePtr->unitInfo, 4*sizeof(short));
tmpAddress +=4*sizeof(short);
memcpy(tmpAddress , devicePtr->unitSN, 6*sizeof(short));
tmpAddress +=6*sizeof(short)
如果您尝试将其保存在字节数组中而不是