我有以下問題:我試圖使用Crypto++
來計算數據塊的adler32校驗和,但在轉換byte [4]數組輸出後得到錯誤的校驗和到uint32_t。Crypto ++將Adler32摘要(字節數組)轉換爲uint32_t
此功能與CRC32工作得很好:
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
但函數計算的Adler32返回一個無效的值:
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
希望有人可以給我一個提示。
的Fabian格爾茨
我收到以下編譯器錯誤:「未定義的引用到'ntohl @ 4'」使用mingw甚至強硬我包括winsock2.h。有沒有其他的方式來做到這一點,沒有額外的功能? – Fabian
你可以這樣做:'checksum = digest [0];校驗<< = 8;校驗和| =消化[1];校驗<< = 8;校驗和| =消化[2];校驗<< = 8;校驗和| =摘要[3];' –
它也違反了C/C++標準。 punning使用一個指向字節(應該是1)與int(應該是4)對齊的指針。該值需要'memmov''d或'memcpy''d出來。 – jww