【发布时间】:2019-10-27 23:04:51
【问题描述】:
我正在尝试解析一个包含多种数据类型的缓冲区。
以缓冲区为例:
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 中保存和解析这些数据呢?
这里关于 SO 的一些问题表明,您可以在增加指针(按一定数量的字节)之前将其转换为 char 指针,但这不会给出隐式转换警告并增加代码的复杂性吗?
如果开发人员确切知道他/她想要前进多少字节,是否应该允许增加 void 指针?
如果没有,我如何在其他 C 方法中实现这一点?
Edit1:如果在char* 中保存数据除了帮助我增加指针之外别无其他,我可以从那里保存char* 和memcpy 中的所有数据吗?
【问题讨论】:
-
@John3136 但是,数据是二进制的,而不是字符串。如果您说它相似,那么我在 Edit1 中的猜测得到了证实,并且我的问题得到了回答。但我不认为我的问题不清楚我在问什么。
-
标准 C 中不存在 void 指针算法。使用
char *和 memcpy。例如,使用int32_t而不是int... -
@AnttiHaapala 感谢您的建议,我已经使用
int32_t。
标签: c gcc void void-pointers