0
我有一個包含大量文件(如.tar)的二進制文件,我可以在其中找到二進制文件和文本文件。從二進制文件中讀取文本時避免 r n
當存儲器串加工,運輸線路通常是「\ n」,但如果我讀的文本部分從該壓縮文件,我得到「\ r \ n」。因此處理這個文本給我錯誤。
下面是從二進制文件中讀取文本代碼:
這給了我正確的文本轉換成數據,但下面的代碼給我讀一個空行,當錯誤:
istringstream ss(data); // create a stringstream to process it in another function
delete[] data; // free the data buffer
// start processing the file
string line;
getline(infile, line); // read an empty line
if(line.size() > 0) {
/*
enters here, because the "empty" line was "\r\n", and now the value of line is '\r', therefore line.size() == 1
*/
...
那麼,有什麼建議可以避免'\ r'?
我在Notepad ++上編輯它。將其配置更改爲使用'\ n'而不是'\ r \ n'作爲座標系運行,但我不想依賴於此,因爲其他人可能會錯過它,並且如果發現問題很難那個會發生。
左右,基本取代「\ r \ n」爲「\ n」現實時間。 這是明顯的答案,增加boost :: trim_right(line);在getline工作後,但我預計會有更有效率的東西,或更好的... – danikaze
不是我所知道的,至少如果您需要處理真正的二進制數據。當然,如果你的數據都是可打印的,你可以在文本模式下打開它(「r」而不是「rb」),這將爲你處理。 – HerrJoebob