Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
#1

Расчет CRC-16 c Revert: true - C++

11.02.2014, 10:13. Просмотров 2005. Ответов 9
Метки нет (Все метки)

Добрый день. Прошу помочи с такой проблемой: сделал быстрый (т.е. с таблицей) расчет CRC для полинома 0х1021. Считает верно.
Теперь пытаюсь сделать для полинома 0х8005, и не получается ввиду того, что не могу понять, что такое Revert: true.
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
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
unsigned short crctable[256] = {0};
unsigned short MakeCRC16Table(void)
{
 int r = 0xFFFF;
  for(unsigned short i=0; i<256; i++)
   {
    r = (i)<<8;
     for(int j=0; j<8; j++)
       {
        if(r&(1<<15)) r=(r<<1)^0x8005;
        else r=r<<1;
       }
     crctable[i]=r; 
   }
}
 
 
int main(int argc, char *argv[])
{
    MakeCRC16Table();
    for (int i = 0; i<256; i++){
        if ((i%5)==0) cout<<endl;       printf("    %x", crctable[i]);}
    getchar();
    return 0;
}
Я так понимаю, что Revert:true означает, что надо проверять на "1" не старший бит, а младший. Попробовал сдвигать в другую сторону - все равно не совпадает с вики.
Подскажите, в чем проблема!

Добавлено через 31 минуту
Ничего не нашел в гугле на эту тему.

Добавлено через 3 часа 30 минут
ап!

Добавлено через 18 часов 22 минуты
ап.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 10:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расчет CRC-16 c Revert: true (C++):

Реализовать функцию Revert(s), возвращающую строку, полученную из символов, составляющих s - C++
2. Реализовать функцию Revert(s), возвращающую строку, полученную из символов, составляющих s, записанных в обратном порядке: 123ааббвв -&gt;...

Глюк false = true == true; - C++
Возник глюк, пишу: result.isPlus = this-&gt;isPlus == numberBigSize.isPlus; Поля &quot;this-&gt;isPlus&quot; и &quot;numberBigSize.isPlus&quot; равны true, но...

Реализация crc - C++
Здравствуйте. Пытаюсь написать алгоритм Используя полимональную арифметику. Опишу алогритм как понимаю.. Считываю исходный ...

Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. - C++
День добрый товарищи специалисты, помогите пожалуйста с примером m=((1/n)*\sum_{i=1}^{n}{x}_{i}){}^{2}-\sum_{i=1}^{n}{x}_{i} ,n=5 ф-ция...

Алгоритм вычисления CRC-8 - C++
unsigned short crc8 (unsigned short *ptr, unsigned short size ) { unsigned short sum=0; while(size&gt;0) { sum+=ptr; sum += (sum...

Наивный подход CRC-32 - C++
Объясните пожалуйста что делает каждая строчка функции в наивном подходе CRC-32. static uint32_t crc32_naive(uint8_t *buf) { ...

9
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,552
Завершенные тесты: 1
11.02.2014, 10:20 #2
Цитата Сообщение от Mihail Samohval Посмотреть сообщение
что такое Revert: true.
А что это такое? Где, к примеру, это в коде?

Цитата Сообщение от Mihail Samohval Посмотреть сообщение
Добавлено через 3 часа 30 минут
ап!
Добавлено через 18 часов 22 минуты
ап.
Пункт 4.15 Правил:
Чтобы "поднять" тему в разделе и поиске по форуму, используйте осмысленные сообщения, например "Тема/проблема/задача актуальна". Если вы чего-то достигли в решении проблемы на этот момент, сообщите об этом.
0
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
11.02.2014, 10:34  [ТС] #3
упс, виноват. Мне казалось, раньше можно было редактировать сообщение, поднимая его таким образом вверх в списке тем, а что-то не получилось так сделать.


Насчет задачи. ПРимеры расчета таких таблиц есть вот тут:
http://ru.wikibooks.org/wiki/%D0%9F%...0%B8%D1%8F_CRC

Вот тут сталкивались вроде с этой проблемой, я попытался вникнуть в синтаксис Паскаля, чтобы понять, как работает процедура составления таблицы и попробовал сделать также - не совпадают значения с таблицей в вики.
[cut]
0
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,552
Завершенные тесты: 1
11.02.2014, 10:41 #4

Не по теме:

Цитата Сообщение от Mihail Samohval Посмотреть сообщение
Мне казалось, раньше можно было редактировать сообщение, поднимая его таким образом вверх в списке тем
Вот надо поднимать как-то более информативно что ли.


Цитата Сообщение от Mihail Samohval Посмотреть сообщение
Вот тут сталкивались
5.8 - ссылки на сторонние форумы запрещены.
Перепечатайте сюда интересующий вас фрагмент кода.
0
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
11.02.2014, 10:46  [ТС] #5
Есть!
"скорее всего разница в том, что в википедии названо RefIn. Для линий связи принято начинать с младшего бита.
Вот работающий алгоритм на паскале, для
Name : CRC 16
Width : 16
Poly : 8005
Init : 0000
RefIn : True
RefOut : True
XorOut : 0000
Check : BB3D

Pascal
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
procedure TCrc16Calculator.Init(Polynomial: word);
var
  I, r: word;
  j: byte;
begin
  for I:= 0 to 255 do
  begin
    r:= I;
    for j:= 0 to 7 do
    begin
      if (r AND $0001) = $0001 then
        r:= (r shr 1) xor Polynomial
      else
        r:= r shr 1;
    end;
    FCrcTable[I]:= r;
  end;
end;
 
type
  TByteArray = packed array[1..(MaxInt-1)] of byte;
  PByteArray = ^TByteArray;
 
function TCrc16Calculator.calcCrc(Data: Pointer; DataSize: Integer): word;
var
  DataPtr: PByteArray;
  I: Integer;
  idx: Integer;
begin
  DataPtr:= Data;
  Result:= 0;
  for I:= 1 to DataSize do
  begin
    Idx:= ((Result and $FF) xor DataPtr^[I]);
    Result:= FCrcTable[Idx] xor (Result shr 8);
  end;
end;
 
procedure testStdSequence();
var
  calc: TCrc16Calculator;
  arr: string;
begin
  arr:= '123456789';
  calc:= TCrc16Calculator.Create($A001);//$A001 == реверсированное $8005
  Assert(calc.calcCrc(@arr[1], 9) = $BB3D);
end;
Добавлено через 2 минуты
Смотрю вот на процедуру создания таблицы. Вроде вся разница в том, что сравниваем младший бит и сдвигаем вправо?
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.02.2014, 14:47 #6
CRC RevEng, an arbitrary-precision CRC calculator and algorithm finder

CRC RevEng is a portable, arbitrary-precision CRC calculator and algorithm finder. It calculates CRCs using any of the 72 preset algorithms, or a user-specified algorithm to any width. It calculates reversed CRCs to give the bit pattern that produces a desired forward CRC. CRC RevEng also reverse-engineers any CRC algorithm from sufficient correctly formatted message-CRC pairs and optional known parameters. It comprises powerful input interpretation options. Compliant with Ross Williams' Rocksoft™ model of parametrised CRC algorithms.
0
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
11.02.2014, 16:17  [ТС] #7
Так, и что? gazlan, ?
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.02.2014, 16:24 #8
Идем по ссылке и читаем. До просветления. Там есть ответы на все ваши вопросы.
0
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
11.02.2014, 16:37  [ТС] #9
Блин, не могу перейти, у меня с рабочего компа доступ на этот сайт закрыт...
1
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.02.2014, 16:46 #10
Цитата Сообщение от Mihail Samohval Посмотреть сообщение
доступ на этот сайт закрыт
Не туда ткнул :-) В эташе.
0
Вложения
Тип файла: 7z CRCRevEng105.7z (161.4 Кб, 33 просмотров)
11.02.2014, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 16:46
Привет! Вот еще темы с ответами:

Как подсчитать CRC! - C++
Уважаемые Форумчане! Как подсчитать CRC. Есть файл чтения EEProm. - :10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 ...

Подсчитать CRC для файла - C++
Здравствуйте! Есть имя файла. Как для этого файла подсчитать CRC? Проблема не в понимании алгоритма, а в том, что на данном языке я не...

Убрать реверс в CRC-алгоритме - C++
Господа, помогите ньюфагу. Нашел такую реализацию CRC32. Если проверить здесь www.zorc.breitbandkatze.de/crc.html, видно что она выдает...

Написать расчет CRC - C#
Есть расчет CRC на C++ А как это написать на c#? Массив я написал так : ushort crcTab ={......}


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru