이진 파일을 클래스 변수로 읽으려는 중입니다. 정수는 올바르게 읽고 표시되지만 이중 값은 이상한 값을 갖습니다. 나는 여기서 무슨 일이 일어나고 있는지 확신하지 못한다. 명령 윈도우의 출력은 다음과 같습니다 다른 형식의 변수를 이진 파일에 쓰고 클래스 변수로 읽는 중 잘못된 값이 나타난다
98
366
7
-9.25596e+61
내 코드입니다 : 컴파일러가 패드 사용자
struct
에 허용
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
class text
{
private:
int var1, var2, var3;
double var4;
public:
int getVar1() { return var1; }
int getVar2() { return var2; }
int getVar3() { return var3; }
double getVar4() { return var4; }
};
using namespace std;
int main()
{
// Create test binary file
FILE* file = fopen("D:\\Desktop\\TestFile", "wb");
// Define test variables
int var1 = 98, var2 = 366, var3 = 7;
double var4 = 52.13;
// Write test variables to file
fwrite(&var1, sizeof(var1), 1, file);
fwrite(&var2, sizeof(var2), 1, file);
fwrite(&var3, sizeof(var3), 1, file);
fwrite(&var4, sizeof(var4), 1, file);
fclose(file);
// Read from file into class
FILE* input;
input = fopen("D:\\Desktop\\TestFile", "rb");
text t;
fread(&t, sizeof(t), 1, input);
cout << t.getVar1() << endl << t.getVar2() << endl << t.getVar3() << endl << t.getVar4() << endl;
fclose(input);
return 0;
}
'text'의 변수를 직접 읽어보십시오. 't'의 크기는 반드시 모든 멤버 변수의 크기의 합계와 같을 필요는 없습니다. – AndyG
'text' 클래스의 멤버는 그 사이에 패딩을 가질 수 있습니다. 개별 멤버를 작성할 때 패딩을 쓰지 않으므로 전체 클래스를 읽으려고하면 패딩 바이트를 건너 뛰지 않습니다. – Barmar
당신은 파일에서 쓴 것과 같은 것을 읽지 않습니다. 3 개의 int와 double을 쓰지 만'text' 객체를 읽으려고합니다. 쓰기 및 읽기 대칭을 시도하십시오 – user463035818