Как будет выглядеть совместимая с прямым порядком байтов версия этого метода CRC32? - PullRequest
4 голосов
/ 29 апреля 2011

Я работаю над проектом, который требует проверки CRC32 для данных, которые передаются.Я хотел бы сделать мой код совместимым не только для архитектуры Intel («Little Endian»), но и для архитектуры Solaris («Big Endian»).Я обнаружил этот «CCRC32», который отлично работает на двух машинах с прямым порядком байтов, но совершенно не проходит любые кроссплатформенные тесты:

Код:

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.
}

Итак, мой вопрос такойЗнаете ли вы, кто-либо из гористых систем с прямым порядком байтов, как настроить вышеупомянутые методы для работы с машинами с прямым порядком байтов, или кто-нибудь знает о существующем фрагменте исходного кода, который может достичь моей цели?До сих пор мне не удавалось найти.

Спасибо за потраченное время,

Джеймс

1 Ответ

2 голосов
/ 29 апреля 2011

Не уверен, поможет ли это, но этот фрагмент кода C имеет большие и маленькие порядковые версии.

...