目标:
用二进制数据打开文件,将整个文件读入内存,更改文件的某些部分,将内存缓冲区写入文件,关闭文件.利润?
问题:
我刚刚开始学习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.有没有办法让我以冗长的方式检查缓冲区中的值?
总而言之,我只想帮助掌握整个概念,以便我自己解决这个问题.
谢谢!
编辑:删除了文件的循环.添加了打印整个缓冲区的功能.