Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм подсчета CRC32 в PHP

13
05 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Собственно сабж. По какому именно алгоритму работает PHP-функция crc32()? Копаться в исходниках РНР не советовать.
256
05 февраля 2007 года
foxweb
1.0K / / 27.07.2005
самое вменяемое описание — на википедии: http://ru.wikipedia.org/wiki/CRC32

энциклопедии люблю с детства :)
13
05 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: foxweb
самое вменяемое описание — на википедии: http://ru.wikipedia.org/wiki/CRC32

энциклопедии люблю с детства :)



=) А ты уверен что в РНР реализован именно этот алгоритм?

256
05 февраля 2007 года
foxweb
1.0K / / 27.07.2005
моё программерское образование подсказывает мне: "да, уверен!" :)
ты думаешь, под одним и тем же именем могут скрываться принципиально разные алгоритмы? если ты так думаешь, проверить на практике недолго.
13
05 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
В том-то и дело что нет стандарта на алгоритм CRC16/CRC32. Каждый решает это по-своему.
На проверку времени нет. Придется вместо CRC использовать MD5 - расчеты тяжелее зато есть стандартный алгоритм.
4
05 февраля 2007 года
mike
3.7K / / 01.10.2002
Не правда, CRC32 все считают одинаково. Результат записывают по разному - в MySql - это целое без знака, в PHP - целое со знаком.

В свое время много собак съел с CRC32
13
05 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: mike
Не правда, CRC32 все считают одинаково. Результат записывают по разному - в MySql - это целое без знака, в PHP - целое со знаком.

В свое время много собак съел с CRC32



Значит должен быть стандарт. Где его искать?

256
05 февраля 2007 года
foxweb
1.0K / / 27.07.2005
гугл форэва. http://www.forth.org.ru/~mlg/mirror/home.earthlink.net/~neilbawd/crc32.html
12
05 февраля 2007 года
alekciy
3.0K / / 13.12.2005
Во во)))) если подчет контрольной суммы работает во многих языках и на многих платформах одинаково, то спеца должно быть однозначно.
63
18 февраля 2007 года
Zorkus
2.6K / / 04.11.2006
Прошу прощения, что на С++, но сам алгоритм тот же. Пример для NULL - terminate строки, недавно как то писал:) Может, кому интересно будет.
Код:
CRC.H:

class Crc32
{  
public:
    Crc32();
   
    /*Функция, вычисляющая контрольную сумму
для переданной     null - terminated строки.*/
    unsigned int ProcessString(const char* s);

private:
     unsigned int table[256];
};


CRC.CPP:

#include "Crc32.h"

Crc32::Crc32()
{
    const unsigned int CRC_POLY = 0xEDB88320;
    unsigned int i, j, r;
    for (i = 0; i < 256; i++)
    {
        for (r = i, j = 8; j; j--) r = r & 1? (r >> 1) ^ CRC_POLY: r >> 1;
        table = r;
    }
}

unsigned int Crc32::ProcessString(const char* s)
{
    const unsigned int  CRC_MASK = 0xD202EF8D;
    register const unsigned char* pdata = reinterpret_cast<const unsigned char*>(s);
    register unsigned int crc = 0; //_resultCrc32;
    static int i = 0;
    for(i = 0; pdata; )
    {
        crc = table[static_cast<unsigned char>(crc) ^ *pdata++] ^ crc >> 8;
        crc ^= CRC_MASK;
    }
    return crc;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог