我試圖導出各種值,如int和簡單的結構,以二進制文件。這裏有一些代碼:ostream ::寫不寫整個結構?
#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或更多值(需要多個字節進行存儲),則該文件將變爲4個字節長。我在Win7上使用Visual Studio 11 Developer Preview;我沒有檢查過其他系統或編譯器是否發生了相同的情況。我怎樣才能使它輸出正確的值爲256或以下的a或b?
你如何確定文件的長度? – 2012-04-01 01:06:29
那麼,我打開它在記事本+ +,它顯示爲2個字符的值在256下,否則4。但是,如果我右鍵單擊該文件並單擊「屬性」它將顯示我4個字節... – Mark 2012-04-01 01:10:23
我認爲其中存在您的問題;您正嘗試通過在文本編輯器中查看來確定二進制文件大小。 – 2012-04-01 01:11:47