我正在做一個非常基本的校驗和文件,通過讀取輸入文件到字符數組,然後遍歷該數組並將每個字符添加到校驗和中。問題是,當我這樣做時,我所有的校驗和都是10太高(10是換行符的ASCII十進制值)。C++校驗和讀取不存在的換行
當我知道我的文本中沒有換行符時,它是如何插入到我的代碼中的換行符?即使是單行文本文件也會添加一個換行符!
#include <iostream>
#include <fstream>
int main() {
int fileLength = 0;
std::ifstream inputFile;
char charArray[10000];
int checkSumValue = 0;
// open file in binary
inputFile.open("/Path/To/File", std::ios::binary);
// get file length, then return to beginning of file
inputFile.seekg(0, std::ios_base::end);
fileLength = inputFile.tellg();
inputFile.seekg(0, std::ios_base::beg);
// read all data from file into char array
inputFile.read(charArray, fileLength);
// iterate over char array, adding ascii decimal value to checksum
for (int num = 0; num <= fileLength; num++) {
std::cout << "Checksum value before iteration " << num << " is "
<< checkSumValue << std::endl;
checkSumValue += static_cast<int>(charArray[num]);
}
// properly close out the input file
inputFile.close();
inputFile.clear(std::ios_base::goodbit);
std::cout << "The checksum value is: " << checkSumValue << std::endl;
std::cout << "The file length is: " << fileLength << std::endl;
return 0;
}
啊,但這裏是這樣的:我在文件上顯示長度爲3,只有兩個字符:At。即使在將for循環更改爲'num
Moses
@Martin:你也不應該把整個文件讀入內存。如果你打開一個10G數據文件會發生什麼?以小塊閱讀文件。 –
@Moses:如果它說文件長度是3,那麼文件中有三個字符。 (0,1,2)用另一個工具檢出文件進行驗證,但文件中有三個字符。 –