Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В массиве, все элементы которого различны, найти и удалить n наименьших элементов, «поджимая» массив к началу и сохраняя порядок следования http://www.cyberforum.ru/cpp-beginners/thread1093219.html
В массиве, все элементы которого различны, найти и удалить n наименьших элементов, «поджимая» массив к началу и сохраняя порядок следования
C++ Разработать шаблон класса реализующего работу с матрицами переменной размерности. Разработать шаблон класса реализующего работу с матрицами переменной размерности. Тип эле- мента задается как параметр шаблона. Написать тестовую программу. Помогите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1093210.html
Объясните значение записей C++
забыл как интерпретируются записи: if(ex) , if(!ex) и if!(ex) Добавлено через 41 минуту up!
Написать программу решения уравнения C++
X (x+a) (x+b) (x+a+b) =c написать программу решения этого уравнения.
C++ Массив объектов в конструкторе другого класса http://www.cyberforum.ru/cpp-beginners/thread1093181.html
есть класс A: class A{ public: double *weights; A() { } A(int a) {
C++ Массив. Вывести на экран числа имеющие 2 одинаковые цифры Доброе время суток ГУРУ, профи, и прогеры. В массив вводять 4-х значьные числа, надо вывести на экран числа имеющие 2 одинаковые цифры. подробнее

Показать сообщение отдельно
Mihail Samohval
5 / 5 / 1
Регистрация: 06.06.2013
Сообщений: 23
11.02.2014, 10:46  [ТС]     Расчет CRC-16 c Revert: true
Есть!
"скорее всего разница в том, что в википедии названо 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 минуты
Смотрю вот на процедуру создания таблицы. Вроде вся разница в том, что сравниваем младший бит и сдвигаем вправо?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru