2016-06-02 8 views
1

私はJavaプログラマーであり、C++を学ぼうとしています。私は動作しているCRC32関数を持っていますが、配列からcharsを受け取り、そのCRC32を計算します。CRC32のファイルを読む

私はファイルを読み取り、ファイルのCRC32を計算したいと思っています。

私はファイルを読んで、それを分割し、すべてのデータを配列にするか、または簡単な方法がありますか?

unsigned int crc32(unsigned char *message) { 
int i, j; 

unsigned int byte, crc; 

i = 0; 
crc = 0xFFFFFFFF; 
while (message[i] != 0) { 
    byte = message[i]; // Get next byte. 

    crc = crc^byte; 

    for(j = 7; j>=0; j--){ 
    crc = (crc >> 1)^(crc & 1 ? 0xEDB88320 : 0); 
    } 
    i = i + 1; 
} 
    return ~crc; 
} 

int main() 
{ 
unsigned char a[] = {'e',0}; 

cout << std::hex <<"0x" << crc32(a); 

return 0; 

} 

答えて

1

freadまたはストリームAPIを使用してファイルを1つのチャンクにロードし、crc32関数を適用することができます。または、それを分割してロードし、そのように関数を適用することができます。 (x64の大きなアドレス空間、OSによって処理される仮想メモリ、メモリマッピングなどのおかげで)チャンクを必要とせずにかなり大きいサイズになることができますが、特定のサイズを超えるファイルについては、これが最善の方法です。

一般に、プログラミング言語にかかわらず、プログラム設計の原則は多かれ少なかれ適用されます。言語を切り替えることによって得られるものは、異なるAPI、異なる抽象的なものです(ただし、ますます多くの言語が同じセットクラスベースのオブジェクト指向、ラムダ、非同期/待機など)。同じアドバイスは、Python、Java、C++、Rubyなどにも有効です。