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

标签 c gcc void void-pointers

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

示例缓冲区:

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/

相关文章:

c++ - 即使我用 -L 指定了它的位置,链接器也找不到库

c - inotify_event 返回 wd -1

c++ - 如何在编译时测试 libstdc++ 的版本,而不是 GCC?

void - "EasyMock.expectLastCall();"是否在不进一步调用结果 IExpectationSetters 的情况下执行任何操作?

java - 无法理解递归函数的输出。

c - Unix 环境中的敏感退出状态; SIG_* 范围

c - 忽略或重新定义 GCC 标准预定义宏

c++ - ld : library not found for -lgcc_ext. 10.5

c - pthread 空指针转换

c - Linux 上的 OpenGL : dlopen libGL. 所以