C 如何在指针中保存多类型数据

C 如何在指针中保存多类型数据,c,gcc,void,void-pointers,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). 到目前为止,我已经掌握了有关如何解析此文件的信息,我一直在执行memc

我试图解析一个由多种数据类型组成的缓冲区

例如,缓冲区:

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_integer
data->some_char\u array
等访问数据字段。我认为这比在缓冲区中移动指针更清晰、更容易理解

@John3136然而,数据是二进制的,而不是字符串。如果你说它是相似的,那么我在Edit1中的猜测就被证实了,我的问题也得到了回答。但我不认为我的问题不清楚我在问什么。标准C中不存在空指针算法。使用
char*
和memcpy。使用
int32_t
而不是
int
例如…@AnttiHaapala谢谢你的建议,我已经使用了
int32_t