23 / 23 / 4
Регистрация: 21.11.2010
Сообщений: 77
1

Расчет CRC32 файла

01.07.2016, 11:17. Показов 4165. Ответов 9
Метки нет (Все метки)

Не могу найти рабочий вариант расчета CRC32 файла для C++Builder 10 Seattle.
Хотел использовать библиотеку http://www.slavasoft.com/fastc... 2_file.htm но выдает ошибки.
Не хочу использовать такую громоздкую библиотеку как boost для такой элементарной ф-и.
Миниатюры
Расчет CRC32 файла  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2016, 11:17
Ответы с готовыми решениями:

Про CRC32
Народ, кто шарит в CRC, помогите. Прогу надо доделать или переделать, может у кого-нибудь рабочий...

Расчет CRC32
Добрый день! Подскажите, как рассчитать контрольную сумму: printf("2506000000%04X9001%02X", c,...

Расчет crc32 по файлам
Всем добрый день! У кого-нибудь был опыт написания программы на пайтоне, для расчета crc32 файлов...

Crc32 файла
Добрый день! Я писала программку для вычисления crc32 файла с таблицей значений, но преподу она не...

9
Модератор
3348 / 2124 / 348
Регистрация: 13.01.2012
Сообщений: 8,282
01.07.2016, 11:57 2
MrLOLS, Расчет контрольной суммы файла
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2016, 13:11 3
Цитата Сообщение от MrLOLS Посмотреть сообщение
Не хочу использовать такую громоздкую библиотеку как boost для такой элементарной ф-и.
Всмысле? Так boost и так должен входить C++Builder 10 Seattle смысл писать велосипеды?
0
23 / 23 / 4
Регистрация: 21.11.2010
Сообщений: 77
01.07.2016, 15:53  [ТС] 4
Для пиратской C++Builder 10 Seattle подключил библиотеку boost таким образом:
1. Скачал boost 1.39
2. Разархивиров­ал папку boost в архиве в C:\Program Files (x86)\Embarc­adero\Studio­\17.0\includ­e\
3. Подключил библиотеку #include <boost/crc.hpp>

Пожалуйста, напишите функцию которой я бы посылал путь к файлу, а она возвращала CRC32 типо "9D53681­3". С примера разобраться сам не могу http://www.boost.org/doc/libs/... xample.cpp
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31884 / 20782 / 8066
Регистрация: 22.10.2011
Сообщений: 36,000
Записей в блоге: 7
01.07.2016, 16:25 5
Я когда-то писал через WinAPI-шную MapViewOfFil­e + недокументир­ованную RtlComputeCr­c32 из ntdll.dll, если интересно - покажу как.
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2016, 16:36 6
Цитата Сообщение от MrLOLS Посмотреть сообщение
Для пиратской C++Builder 10 Seattle подключил библиотеку boost таким образом:
Предыдущих версиях (например в XE3) ее не нужно было подключать она и так шла с бустом.
0
23 / 23 / 4
Регистрация: 21.11.2010
Сообщений: 77
01.07.2016, 23:50  [ТС] 7
Получил результат вида "2371165795"­, теперь осталось преобразоват­ь в шестнадцатер­ичную систему.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <boost/crc.hpp>  // for boost::crc_32_type
#include <fstream>    // for std::ifstream
 
void TForm1::CRC() {
LPCSTR szFileName = "test.exe";
 
    DWORD dwResult = 0;
    boost::crc_32_type result;
    std::streamsize const buffer_size = 1024;
    ifstream file(szFileName, std::ios_base::binary);
    if (file) {
        do {
            char buffer[buffer_size];
            file.read(buffer, buffer_size);
            result.process_bytes(buffer, file.gcount());
        }
        while (file);
    }
    else {
        Memo1->Lines->Add("Failed to open file");
    }
    Memo1->Lines->Add(result.checksum());}
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2016, 00:06 8
C++
1
2
std::stringstream ss;
ss <<std::hex<< crc.checksum();
?
0
случайный прохожий
2065 / 1336 / 458
Регистрация: 20.07.2013
Сообщений: 3,728
02.07.2016, 01:17 9
volvo, хотелось бы взглянуть.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31884 / 20782 / 8066
Регистрация: 22.10.2011
Сообщений: 36,000
Записей в блоге: 7
02.07.2016, 02:15 10
Цитата Сообщение от gunslinger Посмотреть сообщение
хотелось бы взглянуть
Ну, смотри:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
typedef INT(WINAPI *RtlCrc)(INT, const BYTE*, UINT);
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    LPVOID lpBaseAddress;
    String fn = "D:\\test\\01.doc"; // CRC32 = a2cda617, для проверки
 
    __int64 sz = FileSizeByName(fn); // это брал из IdGlobalProtocols.hpp
 
    HANDLE hFile = CreateFile(fn.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        HANDLE hFileMapObj = CreateFileMapping(hFile, 0, PAGE_READWRITE, 0, 0, L"MySharedValue");
        if (hFileMapObj != 0)
        {
            lpBaseAddress = MapViewOfFile(hFileMapObj, FILE_MAP_WRITE, 0, 0, 0);
            if (lpBaseAddress != 0)
            {
                HMODULE hDLL = GetModuleHandle(L"ntdll.dll");
                if (hDLL != NULL)
                {
                    RtlCrc ComputeCrc32 = (RtlCrc)GetProcAddress(hDLL, "RtlComputeCrc32");
                    if (ComputeCrc32)
                    {
                        INT iCRC32 = ComputeCrc32(INT(0), (BYTE*)lpBaseAddress, sz);
                        ShowMessage(String().sprintf(L"Computed CRC32 = %X", iCRC32));
                    }
                    else
                        ShowMessage("Cannot find RtlComputeCrc32");
                }
                else
                    ShowMessage("Cannot find ntdll.dll");
 
                UnmapViewOfFile(lpBaseAddress);
            }
            else
            {
                ShowMessage(L"MapViewOfFile error :" + SysErrorMessage(GetLastError()));
            }
            CloseHandle(hFileMapObj);
        }
        else
        {
            ShowMessage(L"CreateFileMapping error: " + SysErrorMessage(GetLastError()));
        }
        CloseHandle(hFile);
    }
    else
        ShowMessage(L"CreateFile error: " + SysErrorMessage(GetLastError()));
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2016, 02:15
Помогаю со студенческими работами здесь

Подсчет контрольной суммы файла по CRC32: разобрать код
Здравствуйте. Есть вот этот код, суть его в том, что вбивается название файла, подсчитывается...

Получить хеш файла (CRC32, MD5, SHA1, TTH, ED2K, BitPrint, AICH....)
Нужно написать приложение выводящее один любой хеш указанного файла, независящий от названия файла....

Crc32
Мне необходимо защитить 1 процедуру. Для этого я выбрал rcr23. Ну вопрос как это все реализовать?...

CRC32
Здравствуйте! Мне нужно написать CRC32 в MATLAB Но я что-то не могу понять сам алгоритм CRC...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru