2011-04-29 73 views
2

我正在处理一个项目,该项目需要对正在传输的数据执行CRC32检查。我想让我的代码不仅适用于Intel架构(“Little Endian”),也适用于Solaris架构(“Big Endian”)。我发现这个“CCRC32”的作品漂亮的两个小端的机器,但完全失败,任何跨平台测试:该CRC32方法的大端兼容版本会是什么样子?

代码:

CCRC32.h & CCRC32.cpp (带下维基百科的“外部链接”)的

http://en.wikipedia.org/wiki/Cyclic_redundancy_check

下面是代码的方法示例:

void CCRC32::PartialCRC(unsigned long *ulCRC, const unsigned char *sData, unsigned long ulDataLength) { 
while(ulDataLength--) { 
    //If your compiler complains about the following line, try changing each 
    //occurrence of *ulCRC with "((unsigned long)*ulCRC)" or "*(unsigned long *)ulCRC". 

    *(unsigned long *)ulCRC = 
     ((*(unsigned long *)ulCRC) >> 8) 
      ^this->ulTable[((*(unsigned long *)ulCRC) & 0xFF)^*sData++]; 
} 




unsigned long CCRC32::FullCRC(const unsigned char *sData, unsigned long ulDataLength) { 
    unsigned long ulCRC = 0xffffffff; //Initilaize the CRC. 
    this->PartialCRC(&ulCRC, sData, ulDataLength); 
    return(ulCRC^0xffffffff); //Finalize the CRC and return. 
} 

所以,我的曲estion是这样的:你们中的任何一个大型前端技术人员是否知道如何调整上述方法来处理大型机器,或者是否有人知道现有的一段可以实现我的目标的源代码?到目前为止,我在搜索中一直没有成功。

谢谢您的时间,

詹姆斯

+0

如果你的crc实现有问题,可能值得看看boost :: crc:http://www.boost.org/doc/libs/1_46_1/libs/crc/ – stefaanv 2011-04-29 07:12:39

回答

相关问题