大的int被误读/误写为二进制文件

时间:2016-08-23 10:19:08

标签: 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);

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

Buffer是char s。

的数组
printf("%i\n", (int)buffer[0]);

在将buffer[0]投射到int之后,会打印int的单个字符的值。

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

要回读这个过程,过程正好相反:int将字符缓冲区转换为perimeter变量。