我正在尝试创建一个保存/加载系统。虽然我已经创建了大量的 ASCII 解析器,但我不太习惯二进制解析器。目前,如果我传递一个小值,比如 2,它就可以工作。也是。 11. 10 返回 13,412 返回 -100。我正在使用可以在读取之前预先计算大小的缓冲区,但无论如何我得到的值都不正确。
这是保存方法的一部分:
FILE *ptr_myfile;
ptr_myfile = fopen("data.sav", "wb");
uint32_t bufferSize = 4;
char *writeBuffer = (char*)malloc(bufferSize);
int value = 412;
memcpy(&writeBuffer, &value, sizeof(value));
fwrite(&writeBuffer, sizeof(char), sizeof(writeBuffer), ptr_myfile);
fclose(ptr_myfile);
这是加载器方法的一部分:
FILE *ptr_myfile;
ptr_myfile = fopen("data.sav", "rb");
//Get file length
fseek(ptr_myfile, 0, SEEK_END);
unsigned long fileLen = ftell(ptr_myfile);
fseek(ptr_myfile, 0, SEEK_SET);
char *buffer = (char *)malloc(fileLen + 1);
if (!buffer) {
fprintf(stderr, "Memory error!");
fclose(ptr_myfile);
return;
}
fread(buffer, fileLen, 1, ptr_myfile);
printf("%i\n", (int)buffer[0]);
fclose(ptr_myfile);
提前致谢!
最佳答案
char *buffer = (char *)malloc(fileLen + 1);
Buffer 是一个 char
数组。
printf("%i\n", (int)buffer[0]);
这会打印 buffer[0]
的值,它是一个字符,在将其转换为 int
之后。
显然,您编写二进制文件的代码没有设法将整个 int
填充到文件的第一个字符中。它通过memcpy
将int
转换为字符缓冲区。
要读回这个,过程是相反的,恰好:memcpy()
字符缓冲区到一个 int
变量。
关于c++ - 大整数被误读/误写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39098446/