C语言写文件的缓存区,C:将二进制文件读取到内存,更改缓冲区,将缓冲区写入文件...

目标:

用二进制数据打开文件,将整个文件读入内存,更改文件的某些部分,将内存缓冲区写入文件,关闭文件.利润?

问题:

我刚刚开始学习C,我找不到有关如何更改内存缓冲区中的二进制数据的足够信息.来自Web开发人员背景(php,python,as3)这对我来说是一个新的领域.

上下文:

我有一个函数,它获取文件的路径和指针地址到char指针内存缓冲区.然后打开文件,遍历文件并将数据写入内存缓冲区.最后关闭文件.

二进制文件的目的是为某些对象保存category-id,它们的位置是它们自己的id. category-id表示为2字节短路.所以基本上它只是一个二进制文件,里面装满了很多我希望能够阅读和更改的短裤.

这是我到目前为止所得到的:

main.c中:

#include "binary-handler.h"

void showFileBuffer(char *buffer, unsigned int fileSize){

int i = 0;

for(; i < fileSize; ++i){

printf("\n", i, ((char *)buffer)[i]);

}

}

int main(){

char path[] = "assets/map-squares.bin";

char *buffer;

int fileSize;

fileSize = readFileToMemory(path, &buffer);

showFileBuffer(buffer, fileSize);

//Code to change buffer

//Code to write buffer to file

return 0;

}

二进制handler.c:

#include

#include

unsigned int getFileSize(FILE **file){

unsigned int size;

if(fseek(*file, 0, SEEK_END) == -1){ return -1; }

size = ftell(*file);

fseek(*file, 0, SEEK_SET);

return size;

}

char *getFileBuffer(FILE **file, unsigned int fileSize){

char *buffer = malloc(fileSize + 1);

fread(buffer, fileSize, 1, *file);

return buffer;

}

unsigned int readFileToMemory(char path[], char **buffer){

unsigned int fileSize;

FILE *file = fopen(path, "rb");

if(file != NULL){

fileSize = getFileSize(&file);

*buffer = getFileBuffer(&file, fileSize);

fclose(file);

return fileSize;

}else{

*buffer = NULL;

return -1;

}

}

1.此代码是否会正确生成第一步(读取文件到内存)?

2.如果是,我如何更改,说缓冲区中的第二个对象的值为0F 00?

3.如何获取缓冲区并将其写回文件?

4.有没有办法让我以冗长的方式检查缓冲区中的值?

总而言之,我只想帮助掌握整个概念,以便我自己解决这个问题.

谢谢!

编辑:删除了文件的循环.添加了打印整个缓冲区的功能.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值