我正在尝试解析包含多种数据类型的缓冲区。
示例缓冲区:
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_array
等访问数据字段,我认为这比通过移动指针更清晰、更容易理解缓冲。
关于c - 如何在指针中保存多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58584110/