gpt4 book ai didi

c - 将结构投影到c中的字节数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:09 25 4
gpt4 key购买 nike

假设我有一个字符数组:

char buffer[1024];

数组实际上包含顺序结构链。

struct MyStruct {
char name[4];
int num1;
int num2;
}

我想遍历数组:

MyStruct *p;
for(int i = 0;i < sizeof(buffer);i += sizeof(MyStruct))
{
// how can I point p to some place in buffer here?
}

我想将 p 指向 buffer 的开始,指向 buffer + 12

最佳答案

需要考虑的一个问题是 char 缓冲区可能没有正确对齐结构(在本例中,它的 int 成员 num1num2)。根据平台和实现,可能需要 4 字节、8 字节或 16 字节对齐。出于这个原因,一种替代方法是最初根据 MyStruct 声明缓冲区,然后通过 char 指针访问它:

MyStruct buffer[1024 / sizeof(MyStruct)];
char * cp = (char *) buffer;
// fill the buffer via cp
for (size_t i = 0; i < sizeof(buffer); ++i)
{
// do stuff with buffer[i]
}

如果该方法不可行,则需要将缓冲区复制到另一个具有安全对齐的缓冲区;例如:

size_t n = sizeof(buffer) / sizeof(MyStruct);
MyStruct * p = (MyStruct *) malloc(n * sizeof(MyStruct));
if (!p) { exit(EXIT_FAILURE); }
memcpy(p, buffer, n * sizeof(MyStruct)); // copy buffer to p
for (size_t i = 0; i < n; ++i)
{
// do stuff with p[i]
}

关于c - 将结构投影到c中的字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777136/

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