簡體   English   中英

在C ++中讀取二進制文件時丟失數據

[英]Missing data when reading binary file in C++

vector<byte> h;
ifstream fin(file.c_str(), ios::binary);
if(!fin)
    return false;
byte b;
while(fin >> b)
    h.push_back(b);

h的長度為4021,而原始文件的長度為4096字節。 但是下面的代碼給出了4096個字節的字符串。 為什么?

ostringstream sout;
sout << fin.rdbuf();
string s = sout.str();

更新:

@ user2079303解決了我的問題,但是可以通過其他任何方式執行閱讀任務。 弄錯了太容易了。

當按字符讀取輸入流char(您的字節為char,對嗎?)時,標准流默認情況下會忽略空格。 您可以使用std :: noskipws停止忽略它們。

fin >> std::noskipws >> b;

注意: ios::binary對此行為沒有任何影響,即使有人期望如此。 據我所知,它僅禁用翻譯行尾。

如果您不想擔心處理,則可以使用實現UnformattedInputFunction的函數。 cppreference有一個很好的示例,說明了如何使用istream :: read讀取二進制文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM