我想解析/广播我有一个uint8 * pMyMemoryLocation
的数据。数据在内存中以uint8表示,但必须强制转换/解析为已知组成的结构。
数据应解析为:
typedef struct{
uint8 iNrOfChannels;
uint8 someValue1;
uint16 someValue2;
uint32 someValue3;
struct{
uint8 someMoreValue1;
uint16 someMoreValue2;
uint32 someMoreValue3;
}mySecondStructType[iNrOfChannels];
}myFirstStructType
我有点想将内存中的uint8强制转换为以下结构:
myFirstStructType * pMyFirstStruct = (myStructType *)pMyMemoryLocation;
pMyMemoryLocation += 8; //Set pointer
现在可以正常工作了。问题如下:
mySecondStructType * pMySecondStruct =
(mySecondStructType *[iNrOfChannels])pMyMemoryLocation;
得到我:
错误[Pe028]:表达式必须具有恒定值
现在iNrOfChannels
只能在运行时获取,因为它是pMyFirstStruct
的第一个成员!
我不想复制或使用更多的内存,因为数据以正确的顺序位于*pMyMemoryLocation
上,而且我确实掌握了有关其组成的信息。
是否可以使用动态大小投射该结构数组?
谢谢您的帮助!
编辑:我真的是C编程的新手...
答案 0 :(得分:0)
myFirstStructType * pMyFirstStruct = (myStructType *)pMyMemoryLocation;
假设数据在pMyMemoryLocation
中可用,
大多数结构将具有一些填充字节。您将必须注意这些填充字节,因此您编写的任何代码都将与实现相关
答案 1 :(得分:0)
您的问题是您无法将某些内容转换为动态数组。 一旦您的结构将被正确初始化,您的内存将如下所示: | 1个字节| 1个字节| 2个字节| 4个字节| 8个字节| ------> | iNrOfChannels * sizeof(mySecondStructType)字节|
您的四个第一个变量彼此相邻,然后是指针。 它始终是8字节大小,因为它是一个指针,并且指针大小永远不会变化。但是该指针指向内存中的随机位置,该位置的大小足以容纳mySecondStruct数组。 您需要为该指针分配内存,否则将永远没有足够的内存。
pMyFirstStruct->inner_struct = malloc (sizeof (mySecondStructType) * pMyFirstStruct->iNrOfChannels);
这样,您就有了2个内存区域,一个由1、1、2、4、8个字节组成的结构组成,然后是一个动态大小的内存区域,该大小在指针的指向下在内存中。
您现在只需循环即可将您的内存通道逐个转换为SecondStructType。
我希望我足够清楚^ = ^解释内存使用情况/指针绝非易事:3