gpt4 book ai didi

c++ - 大整数被误读/误写入二进制文件

转载 作者:行者123 更新时间:2023-11-28 02:01:55 26 4
gpt4 key购买 nike

我正在尝试创建一个保存/加载系统。虽然我已经创建了大量的 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 填充到文件的第一个字符中。它通过memcpyint 转换为字符缓冲区。

要读回这个,过程是相反的,恰好:memcpy() 字符缓冲区到一个 int 变量。

关于c++ - 大整数被误读/误写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39098446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com