2016-11-18 2 views
1

Ich empfange Datei mit seiner CRC, die numerischen Wert ist. Ich muss CRC auf empfangener Datei neu berechnen und es vergleichen. Ich benutze Crypto ++, aber es gab mir keinen numerischen Wert. Bitte lassen Sie mich wissen, wie man CRC32 der Datei mit Crypto ++ berechnet.Berechnung CRC der Datei als numerischer Wert mit Crypto ++

#include<iostream> 
#include<string> 
#include <cryptopp/sha.h> 
#include <cryptopp/crc.h> 
#include <cryptopp/hex.h> 
typedef int UInt32; 
#include <cryptopp/files.h> 

using namespace std; 

string calculateCRC(const string& fileName) 
{ 
    string result; 
    CryptoPP::CRC32 hash; 
    CryptoPP::FileSource(fileName.c_str(),true, 
    new CryptoPP::HashFilter(hash, 
    new CryptoPP::StringSink(result))); 
    return result; 
} 

int main(int argc, char** argv) 
{ 
    cout << endl << calculateCRC("./test.cpp"); 
} 

Dies ergibt Ergebnis als "\ 271 \ 063 \ 307Q". Dank

Antwort

0

Dies gibt Ergebnis als "\ 271 \ 063 \ 307Q"

Ich glaube, das eine Oktal Anzeige von 3 Bytes von binären Daten. Unter GDB können Sie x/4b <address> verwenden, um es in ASCII zu drucken: B9 33 C7 ....

ein HexEncoder zum filter chain hinzufügen, wenn Sie es in ASCII wollen statt binär:

CRC32 hash; 
string result; 

FileSource fs(fileName.c_str(), true, 
    new HashFilter(hash, 
     new HexEncoder(
      new StringSink(result)))); 

cout << result << endl; 

Sein Ausgang zu ähnlich sein wird:

$ ./test.exe 
80BA6847 

typedef int UInt32; 

Dies kann nicht korrekt sein. int leidet unter Überlauf und undefiniertem Verhalten; während unsigned int nicht.

Verwandte Themen