大整数被误读/错误写入二进制文件

Large ints being misread/miswritten to binary file

本文关键字:错误 二进制文件 整数      更新时间:2023-10-16

我正在尝试创建一个保存/加载系统。虽然我已经创建了大量的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("%in", (int)buffer[0]);
fclose(ptr_myfile);

提前感谢!

char *buffer = (char *)malloc(fileLen + 1);

缓冲区是一个char数组。

printf("%in", (int)buffer[0]);

这将打印 buffer[0] 的值,这是一个单个字符,在将其转换为int后。

显然,编写二进制文件的代码无法将整个int填充到文件的第一个字符中。它将int memcpy到字符缓冲区中。

为了读回这个,这个过程完全相反:将字符缓冲区memcpy()int变量中。