Biosi Опубликовано 7 апреля, 2008 Жалоба Поделиться Опубликовано 7 апреля, 2008 Я нашёл в интернете функцию, вычисляющую CRC32. Вогнал в программу - вроде бы работает, то есть при одинаковых входных данных CRC32 выдаёт одинаковую контрольную сумму. Но при попытке взять CRC32 от всего сообщенния (вместе с добавленной в конец контрольной суммой), то результат - не нулевой! А, насколько я понимаю, он должен быть нулевым, если нету помех. Почему так происходит, может кто знает? Как проверить, работает ли CRC32 или нет? Подскажите, пожалуйста! Ссылка на комментарий Поделиться на другие сайты Поделиться
Biosi Опубликовано 7 апреля, 2008 Автор Жалоба Поделиться Опубликовано 7 апреля, 2008 Привожу текст функции, вычисляющей CRC32 DWord __fastcall TForm1::getCRC(char *pchBuf, int nBufLen){ int i;int nIndex;char ch;unsigned long res;unsigned long table [] = {0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D};res = 0xFFFFFFFF;for (i=0;i<nBufLen+4;i++){ nIndex = (res >> 24) & 0xFF; if (i<nBufLen) ch = pchBuf[i]; else ch = 0x0; res = (res << 8) | ch; res ^= table[nIndex];}return res; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 апреля, 2008 Жалоба Поделиться Опубликовано 7 апреля, 2008 Проще всего взять в Интернете какую-нибудь из программ, вычисляющих CRC32, их там полтонны, и сравнить результаты на тестовом примере. Вот, например, пара программ: тут и тут. Ссылка на комментарий Поделиться на другие сайты Поделиться
Biosi Опубликовано 8 апреля, 2008 Автор Жалоба Поделиться Опубликовано 8 апреля, 2008 Проще всего взять в Интернете какую-нибудь из программ, вычисляющих CRC32, их там полтонны, и сравнить результаты на тестовом примере. Вот, например, пара программ: тут и тут. Не, ну мне же надо вставить в программу функцию, вычисляющую СRС32! Сторонние программы отпадают. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ray Опубликовано 8 апреля, 2008 Жалоба Поделиться Опубликовано 8 апреля, 2008 Biosi: Возьми свою программу и стороннюю, и результаты их работы сравни... CRC они должны вычислять одинаковую для одинаковых файлов... Ссылка на комментарий Поделиться на другие сайты Поделиться
Biosi Опубликовано 8 апреля, 2008 Автор Жалоба Поделиться Опубликовано 8 апреля, 2008 Biosi: Возьми свою программу и стороннюю, и результаты их работы сравни... CRC они должны вычислять одинаковую для одинаковых файлов... :) Понял, спасибо! Насколько я понимаю, все они используют один и тот же полином? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 апреля, 2008 Жалоба Поделиться Опубликовано 8 апреля, 2008 Практически все используют один и тот же полином, своего рода стандартный. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти