gpt4 book ai didi

c - 如何将 uint8 * 转换为包含可变长度数组元素的结构? (C 编程)

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:08 24 4
gpt4 key购买 nike

我想解析/转换我有 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 编程的新手......

最佳答案

您的问题是您无法将某些内容转换为动态数组。一旦您的结构被正确初始化,您的内存将如下所示:| 1 字节 | 1 字节 | 2 字节 | 4 字节 | 8 字节 | ------> | iNrOfChannels * sizeof (mySecondStructType) 字节|

您的前 4 个变量彼此相邻,然后是您的指针。它的大小始终为 8 个字节,因为它是一个指针,并且指针大小永远不会改变。但是该指针指向内存中的一个随机位置,该位置的大小足以包含 mySecondStruct 数组。您需要为该指针分配内存,否则您将永远没有足够的内存。

pMyFirstStruct->inner_struct = malloc (sizeof (mySecondStructType) * pMyFirstStruct->iNrOfChannels);

这样,您就有了 2 个内存区域,一个由 1、1、2、4、8 个字节组成,组成您的结构,然后是一个具有动态大小的区域,位于内存中的某个位置,由您的指针指向。

您现在只需创建一个循环,将您的内存 channel 逐个转换为 SecondStructType。

我希望我足够清楚 ^=^ 解释内存使用/指针绝非易事 :3

关于c - 如何将 uint8 * 转换为包含可变长度数组元素的结构? (C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57216782/

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