2016-08-21 99 views
-2

我在搞清楚如何正確地將這個值寫入文件時遇到了一些問題。我在網上做了一些研究,發現了這篇文章。ifstream二進制讀/寫只需要char *?

http://www.eecs.umich.edu/courses/eecs380/HANDOUTS/cppBinaryFileIO-2.html

#include <fstream> 
#include <iostream> 

int main() 
{ 
    int testVar = 71; 
    std::ofstream outputFile; 
    outputFile.open("C:/binary.dat", std::ios::out | std::ios::binary); 
    outputFile.seekg(0); 
    outputFile.write(&testVar, sizeof(testVar)); 
    outputFile.close(); 
} 

我從文章中瞭解什麼是第一個參數是一個空指針?這意味着它會接受任何類型?但是當我輸入時,intelisense說沒有重載,第一個參數需要char *類型。

我使用了錯誤的頭文件還是來自較舊的C++版本?

這裏真的可以使用一些幫助。 謝謝!

+0

我不知道你究竟在問什麼? –

+0

這是關於outputFile.write()參數以及我從文章中拿出的內容。我正在尋找使用二進制輸出將整數寫入文件。 –

+3

您可以在http://en.cppreference.com/w/cpp/io/basic_ostream/write中看到文檔和示例 – Loreto

回答

0

我不熟悉函數的開發歷史。因此,我不能評論爲什麼參數是char*而不是void*

爲您解決問題...

您可以使用:在使用istream::read()

outputFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar)); 

使用reinterpret_cast也。

0

你真的只需要將它轉換爲char *就像前面說過的那樣,但是代碼還有其他問題。 seekg()用於輸入流,並且正在編寫輸出文件。如果您打算清除該行,請使用trunc打開該文件。

#include <fstream> 
#include <iostream> 

int main() 
{ 
    int testVar = 71; 
    std::ofstream outputFile("C:/binary.dat", std::ios::out | std::ios::binary | std::ios::trunc); 
    outputFile.write((char*)&testVar, sizeof(testVar)); 
    outputFile.close(); 
} 
0

第一個參數是char*。具有大小爲1字節的 char表示逐字節數據,而char*表示數據塊。

因此,當寫入原始二進制數據時,數據將作爲char*和塊的大小傳遞。

我是使用錯誤的頭文件還是來自較舊的C++版本?

不,它不是問題,因爲說是char*,而不是void*被作爲論據。

備註 seekg()成員函數用於輸入流。我認爲你需要的功能是seekp()