Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » CRC16_реализация для подсчёта контрольной суммы файла

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 15:30 13-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тишина что то полная, может нет кодеров на сайте?




не нужно поднимать темы. Если будут желающие, ответят.

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 23:57 13-03-2019 | Исправлено: ShIvADeSt, 02:21 14-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Реализовал подсчёт CRC16 с таблицей, всё считает вроде, но результат не тот совсем.
Причём реализовал три варианта, а результат всё ровно не тот.
А есть варианты без таблиц?

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 12:18 15-03-2019
V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ptahy
Укажи язык, на котором пишешь. Для кода используй тег [code].
Реализации CRC-16 есть, например, тут. Мне нравиться 2-й пример "Пример программы расчёта CRC-16 CCITT на языке Си".
И хорошо бы уточнить, какой именно вариант CRC-16 нужен, они разные бывают.

Всего записей: 10502 | Зарегистр. 05-02-2003 | Отправлено: 19:02 16-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На языке Дельфи7 , интересует, CRC16 класический, такой, как в Hex редакторах.
желательно без таблицы .
У меня в посте. если нажать подробнее, там на код мой переключает.
Я не знаю почему, здесь в ответах не грузится код.
Впервые с таким ресурсом встречаюсь, ни фото приложить, ни архив.
напишешь ответ с кодом, он не загружается в ответе, а перекидывает на подробнее.
В начале темы там слово подробнее, если на него нажать, там код и пояснения.

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 15:06 17-03-2019
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В WinHex'е такой:

Код:
 
program crc16;
uses SysUtils;
 
function reversebits(x :Word; bits :Integer) :Word;
var  
    i, ret :Integer;
begin
    ret := 0;
    for i := 1 to bits do
    begin
        ret := (ret shl 1) or (x and 1);
        x := x shr 1;
    end;
 
    reversebits := ret;
end;
 
function crc16(inp :array of Byte; len :Integer) :Word;
var
i, j :Integer;
crc, tmp :Word;
begin
    crc := 0;
    for j := 0 to len - 1 do
    begin
        tmp := reversebits(inp[j], 8);
        crc := crc xor (tmp shl 8);
        for i := 0 to 7 do
        begin
            if (crc and $8000) <> 0 then
                crc := (crc shl 1) xor $8005
            else
                crc := crc shl 1;
        end;
    end;
    
    crc16 := reversebits(crc, 16);
end;
 
var
g_inp: array[0..15] of byte = ($30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$61,$62,$63,$64,$65,$66);
 
begin
    writeln('PasCRC: 'IntToHex(crc16(g_inp, 16), 2));
end.
 

 
Код под FPC, для Delphi, возможно, придётся напильником поработать.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:08 17-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пробую но что то не получается , и так и этак , то var g_inp: array[0..15] of byte = ($30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$61,$62,$63,$64,$65,$66);   не принимает ошибка, то куда  вставлять в мой код функции, аж две?

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 21:22 18-03-2019 | Исправлено: ptahy, 21:22 18-03-2019
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это был только пример функции и как её вызывать.
Ещё один пример, как сделать CRC файла:

Код:
 
{$mode Delphi}
//{$mode objfpc }
program crc16;
uses Classes, SysUtils;
 
function crc(inp :array of Byte; len :LongWord; incrc :Word) :Word;
var
    i, j :LongWord;
begin
    result := incrc;
    if len > 0 then
    begin
        for j := 0 to len - 1 do
        begin
            result := result xor inp[j];
            for i := 1 to 8 do
            begin
                result := (result shr 1) xor ( -(result and 1) and $A001);
            end;
        end;
    end;
end;
 
function fileCrc(fName :String) :Word;
var
    len, totalLen :LongWord;
    fs :TFileStream;
    buf :array[0..4095] of Byte;
begin
    fs := TFileStream.Create(fName, fmOpenRead);
    fs.Position := 0;
    totalLen := 0;
    result := 0;
    while totalLen < fs.Size do
    begin
        len := fs.Read(buf, sizeof(buf));
        inc(totalLen, len);
        result := crc(buf, len, result);
    end;
    fs.Free;
end;
 
begin
    writeln('CRC of file crc16.o: ' + IntToHex(fileCrc('crc16.o'), 4));
end.
 

 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 23:53 18-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С функциями понятно, а как в процедуру это включить, чтоб загружать файл скажем :
 
procedure TForm1.Button1Click(Sender: TObject);
var ...........
begin  
OpenDialog1.Filter:='Bin File (*.Bin)|*.Bin';
with OpenDialog1 do
if Execute then
begin
F:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
 
ну и далее ....

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 21:02 19-03-2019
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
...
begin
 fileCrc(OpenDialog1.FileName);
 
ну и далее ....
 
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 21:19 19-03-2019
ptahy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 14 | Зарегистр. 12-03-2019 | Отправлено: 13:47 20-03-2019
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » CRC16_реализация для подсчёта контрольной суммы файла


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru