入力ファイルを文字配列に読み込んだ後、その配列を繰り返して各文字をチェックサムに追加することで、ファイルに対して非常に基本的なチェックサムを行います。問題は、私がこれを行うと、チェックサムのすべてが10になりすぎることです(10は改行文字のアスキー10進数値です)。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;
}
ああ、ここには事があります:私はちょうど2文字のファイルに3の長さを表示しています。 forループを 'num
Moses
@Martin:ファイル全体を決してメモリに読み込まないでください。 10Gデータファイルを開いた場合はどうなりますか?小さなブロックでファイルを読んでください。 –
@Moses:ファイルの長さが3であるとすると、ファイルには3文字があります。 (0、1、2)検証するために別のツールでファイルをチェックアウトしますが、ファイルには3つの文字があります。 –