J'ai le problème suivant: J'essaie de calculer la somme de contrôle adler32 d'un bloc de données en utilisant Crypto++
, mais je reçois la mauvaise somme de contrôle après la conversion de la sortie de tableau byte [4] à un uint32_t.Crypto ++ convertir Adler32 digest (array byte) en uint32_t
Cette fonction avec crc32 fonctionne très bien:
CryptoPP::CRC32 crc;
byte digest[CryptoPP::CRC32::DIGESTSIZE];
crc.CalculateDigest(digest, (const byte*)pData.data(), pData.size());
uint32_t checksum = *(uint32_t*)digest; //this works fine
mais la fonction du calcul de la adler32 retourne une valeur non valide:
CryptoPP::Adler32 adler;
byte digest[CryptoPP::Adler32::DIGESTSIZE];
adler.CalculateDigest(digest, (const byte*)pData.data(), pData.size());
uint32_t checksum = *(uint32_t*)digest; //this returns a invalid value
quelqu'un d'espoir pourrait me donner un indice.
greetz Fabian
Je reçois l'erreur de compilation suivante: "référence non définie à' ntohl @ 4 '"en utilisant mingw même difficile j'ai inclus winsock2.h. existe-t-il un autre moyen de le faire sans une fonction supplémentaire? – Fabian
Vous pouvez faire quelque chose comme ceci: 'checksum = digest [0]; somme de contrôle << = 8; somme de contrôle | = digérer [1]; somme de contrôle << = 8; somme de contrôle | = digérer [2]; somme de contrôle << = 8; checksum | = digest [3]; ' –
C'est également une violation de la norme C/C++. Le punning utilise un pointeur aligné pour les octets (qui devrait être 1) par rapport à un int (qui devrait être 4). La valeur doit être 'memmov''d ou' memcpy''d out. – jww