int와 간단한 구조체 같은 다양한 값을 이진 파일로 내보내려고합니다. 다음은 몇 가지 코드입니다.ostream :: write가 전체 struct를 쓰지 않습니까?
#include <iostream>
#include <fstream>
#include <cstdint>
using namespace std;
template<class T> void writeToStream(ostream& o, T& val)
{
o.write((char*)&val, sizeof(T));
cout << o.tellp() << endl; //always outputs 4
}
struct foo {
uint16_t a, b;
};
int main()
{
foo myFoo = {42, 42};
ofstream test("test.txt", ios::binary);
writeToStream(test, myFoo);
test.close();
}
프로그램에서 4 바이트 길이의 출력 파일을 생성해야합니다. 그러나 그것을 열면 2 바이트 밖에되지 않습니다. myFoo.a
및 myFoo.b
을 256 이상의 값으로 설정하면 (저장하는 데 1 바이트 이상 필요) 파일의 길이가 4 바이트가됩니다. Win7에서 Visual Studio 11 Developer Preview를 사용하고 있습니다. 다른 시스템이나 컴파일러에서 같은 일이 발생하는지 확인하지 않았습니다. 256 이하의 a 또는 b 값에 대해 올바르게 출력하려면 어떻게해야합니까?
파일 길이는 어떻게 결정됩니까? –
글쎄, 메모장에서 열어서 ++, 그리고 그것을 256 미만의 값을 2 문자로 표시, 그렇지 않으면 4. 그러나, 나는 파일을 오른쪽 클릭하고 "속성"을 클릭하면 4 바이트를 표시합니다 ... – Mark
나는 그 안에 문제가 있다고 생각합니다. 텍스트 편집기에서 이진 파일 크기를 확인하여 이진 파일 크기를 확인하려고합니다. –