gpt4 book ai didi

c - 如何在指针中保存多种类型的数据

转载 作者:行者123 更新时间:2023-11-30 16:11:31 25 4
gpt4 key购买 nike

我正在尝试解析包含多种数据类型的缓冲区。

示例缓冲区:

void* buffer = "1111aaaa[another similar buffer][a second similar buffer]1111"
// Buffer is not actually a string, it is just to show (these are bytes that correspond different types).

到目前为止,我有关于如何解析此文件的信息,我一直在执行 memcpy 来提取这些值,例如:

memcpy(some_int, buffer, 4);
buffer += 4;
memcpy(some_char_array, buffer, 4);
buffer += 4;
// etc...
// So I am trying to parse the buffer like using a file pointer.

这目前对我有用,但我有一些不规则的行为(可能只是其他一些错误,到目前为止它一直工作正常)。

所以我做了一些研究,发现c中的指针算术是不明智的(尽管GCC在某种程度上允许它)。那么我应该如何在 c 中保存和解析这些数据?

这里的一些问题表明,您可以在增加指针(一定数量的字节)之前将其转换为 char 指针,但这不会给出隐式转换警告并增加代码的复杂性吗?

如果开发人员确切地知道他/她想要前进多少字节,难道不应该允许增加一个void指针吗?

如果没有,我如何在其他 C 方法中实现这一点?

Edit1:如果将数据保存在 char* 中除了帮助我增加指针之外不会做任何其他事情,我可以只保存 中的所有数据吗char*memcpy 从那里?

最佳答案

如果数据元素的长度已知并且始终相同,则可以设置一个结构并将整个缓冲区转换为该结构。

示例:

typedef struct {
int32_t some_integer;
char some_char_array[4];
... (some_other_member);
} my_data_t;

my_data_t *data = (my_data_t *)buffer;

然后,您可以使用 data->some_integerdata->some_char_array 等访问数据字段,我认为这比通过移动指针更清晰、更容易理解缓冲。

关于c - 如何在指针中保存多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58584110/

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