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

标签 c++ file binary buffer

我正在尝试创建一个保存/加载系统。虽然我已经创建了大量的 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/

相关文章:

binary - 打字时如何表示不同的数字系统?

c++ - 关于static_cast的问题

c++ - 当两个线程同时尝试对同一个互斥量执行 try_lock() 时会发生什么情况?

c++ - deleteLater() 是否等待所有挂起的信号被传递?

c++ - 如何使用gnu autotool构建qt项目

c - 从 I/O 完成端口中删除句柄以及有关 IOCP 的其他问题

java - 如何递归搜索文件并跳过权限不足的文件?

在 C 中计数 '1'

node.js ipfs-api 添加和读取文件

javascript - 项目具有值(value),但在 Uint8Array 中返回 'undefined'