Crc32 в debug и в release VS.NET 2003
От: INsideR Латвия  
Дата: 28.09.03 18:22
Оценка:
Вообщем такая проблема, если компилирую проект в debug то у меня считается crc32 правильно, если в realease, то нет, при каждом обращении он возвращает разные crc32. Вот код:


class Crc32
{
    unsigned long crc_table[256];
public:
    Crc32()
    {
        crc32_create_table();
    };
    void crc32_create_table(void);
    void crc32_calc(unsigned char *sz, unsigned long len, unsigned long *crc32);
};

#define DO1(buf)    crc = this->crc_table[(crc ^ (*buf++)) & 0xFF] ^ (crc >> 8);
#define DO2(buf)    DO1(buf); DO1(buf);
#define DO4(buf)    DO2(buf); DO2(buf);
#define DO8(buf)    DO4(buf); DO4(buf);

// ------------------------------------------------------------
// calculate table for CRC calculation
//
void Crc32::crc32_create_table(void)
{
    int                i, j;
    unsigned long    t;

    for (i = 0; i < 256; i++)
    {
        t = i;

        for (j = 8; j > 0; j--)
        {
            if (t & 1)
                t = (t >> 1) ^ 0xEDB88320;
            else
                t >>= 1;
        }
        crc_table[i] = t;
    }
}

// ------------------------------------------------------------
// calculate CRC32
//
void Crc32::crc32_calc(unsigned char *sz, unsigned long len, unsigned long *crc32)
{
    unsigned long    crc = *crc32;
    unsigned char    *t = sz;

    while (len >= 8)
    {
        DO8(t);
        len -= 8;
    }
    while (len--)
        DO1(t);

    *crc32 = crc;
}



У меня объявлен namespace:

namespace global
{
 Crc32 crc32;
};



Вызываю я его так:
global::crc32.crc32_calc(tmp, stx.ulongLen — sizeof(struct_EnchancedSTX) — (3 * sizeof(ULONG) + 1), &sum);

Почти что каждый раз при вызове он даёт разный crc32, а в debug всё ok.
Мудр тот, кто знает не многое, а нужное
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.