Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать CRC файла 
:(
    Опции темы
Exception
Дата 3.5.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Класс для подсчёта CRC32 (контрольной суммы):

Код

using System;
using System.IO;
using System.Text;
static class CRC32
{
    private static readonly uint[] crc_table = new uint[256];
    
    public const int BufferSize = 4096;
    
    static CRC32()
    {
        for (int n = 0; n < 256; ++n)
        {
            uint c = (uint) n;
            for (int k = 0; k < 8; ++k)
                if ((c & 1) != 0)
                    c = 0xEDB88320 ^ (c >> 1);
                else
                    c >>= 1;
            crc_table[n] = c;
        }
    }
    
    public static uint Update(uint crc, byte[] data, int offset, int count)
    {
        for (int n = offset; n < offset + count; ++n)
            crc = crc_table[(crc ^ data[n]) & 0xFF] ^ (crc >> 8);
        return crc;
    }
    
    public static uint Compute(byte[] data)
    {
        return Update(0xFFFFFFFF, data, 0, data.Length) ^ 0xFFFFFFFF;
    }
    
    public static uint Compute(Stream stream)
    {
        if (stream == null)
            throw new ArgumentNullException("stream");
        byte[] buffer = new byte[BufferSize];
        int readBytes = 0;
        uint crc = 0xFFFFFFFF;
        while ((readBytes = stream.Read(buffer, 0, BufferSize)) > 0)
        {
            crc = Update(crc, buffer, 0, readBytes);
        }
        return crc ^ 0xFFFFFFFF;
    }
}


Спасибо Void за материал.

Это сообщение отредактировал(а) Exception - 3.5.2007, 21:00
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0894 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.