我有结构:
struct map {
void* key;
void* value;
}
我正在将整个二进制文件读入缓冲区:
void* buffer = malloc(size);
fseek(file, 0, SEEK_SET);
fread(buffer, size, 1, file);
我需要将缓冲区中的一定数量的字节映射到结构上。那些。让我们从缓冲区中获取 40 个字节,在键字段中获取 20 个字节,在值中获取 20 个字节,这样遍历整个缓冲区并将其作为映射数组返回。实际上问题是:如何读取 20 个字节的 key 和 20 个字节的 value?
你不能只接受和计算指针。您需要用尺寸写下每个结构,例如
然后,一边阅读,一边交替阅读……
或多或少是这样的。
否则,您只是在写入和读取指针,而不是它们指向的数据。
如果您将结构描述为
那么事情就不同了,可以直接读写。但是您提供的选项是不可能的。
假设,根据结构 (
map) 的名称判断,映射是假设的,即 直接访问缓冲区中的数据。然后,如果您使用带有指针的结构,那么除了缓冲区之外,您还需要为结构数组分配内存,然后用缓冲区中的地址填充它并返回它。
让我们得到类似的东西
完成后删除缓冲区
然后映射(生成的结构数组)
如果你想直接处理缓冲区中的数据,那么你需要使用这个结构
然后我们得到以下读取数据的函数
你得到一个映射到缓冲区的结构数组,在处理结束时,像这样删除缓冲区
当然,在这两种情况下,如果文件中每 19 个字节后没有二进制零(行终止符),那么它也不会出现在结构字段中。
可以这样实现
或多或少是这样的。如果我正确理解了一切。不要踢你的脚。凭记忆在笔记本上写的。也许某处错了。