大整数被误读/错误写入二进制文件
Large ints being misread/miswritten to binary file
我正在尝试创建一个保存/加载系统。虽然我已经创建了大量的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
变量中。
相关文章:
- 正在读取二进制文件(is_open)
- -bash:/a.out:无法执行二进制文件:Exec格式错误
- 程序错误地读取了二进制文件的一个字节
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 提升二进制文件读取错误不支持的版本
- 错误地读取或写入二进制文件
- FlatBuffers:未支撑的工会向量错误将JSON文件转换为二进制文件
- bash:./main:无法执行二进制文件:Exec格式错误
- 从返回错误值的 C++ 二进制文件中读取
- 读取结构C++二进制文件的运行时错误
- 读取二进制文件时出现分段错误
- bash:即使二进制和Linux是64位的,也无法执行二进制文件:Exec格式错误
- 代码覆盖率错误(未检测二进制文件)
- 从二进制文件获取输入时发生访问冲突错误
- 将不同类型的变量写入二进制文件,然后将其读入类变量,会得到错误的值
- 在不同机器上使用二进制文件时共享对象错误
- c++ cygwin和二进制文件未找到错误
- 大整数被误读/错误写入二进制文件
- 我正在创建一个二进制文件,在其中插入一对int类型和一个结构,并看到下面给出的错误.请提出建议
- "发射失败。找不到二进制文件。 CDT 开普勒日食上的错误