我有以下问题:我试图使用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