![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перевести сие на код Дельфи т.е написать функцию? [D7, XP]
XerSon © (2007-12-13 10:07:00)CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
KeyCode: array[1..8] of byte;
KeyCode[ 8 ] := 0;
For j := 1 to 7 do
KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];
XerSon (2007-12-13 12:58:00) [41]
> Сергей М. © (13.12.07 12:53) [12]
011 55982 вот из такого числа должно получится такое 050000000BDAAE01
XerSon (2007-12-13 12:55:00) [42]
> Сергей М. © (13.12.07 12:53) [12]
>
>
> > XerSon (13.12.07 12:48) [11]
>
>
> Смотря в каком формате осуществляется ввод пользователем
> Виганд-кода
Формат ввода: 011 55982
или
Формат ввода: 01155982
Сергей М. (2007-12-13 12:53:00) [43]
> XerSon (13.12.07 12:48) [11]
Смотря в каком формате осуществляется ввод пользователем Виганд-кода
XerSon (2007-12-13 12:48:00) [44]Простите за назойливость! Но по причине неопытности, столкнулся с проблемой Использования функции:
Есть два поля ввода: (edit1, edit2) и один Буттон (Button1)
Вводим данные в edit1 //код Виганд
//Жмем на Буттон и проверяем на предмет пустого ввода
...
if edit1.text = '' then
MessageDlg('Вы не ввели код карты Виганд!', mtWarning, [mbOK], 0)
else
...
??? Не соображу как Првязать Строковую переменную к массиву!!!
...
//Дополняем код Виганд нулевыми битами до 7-ми байт и посчитать для них циклическую контрольную сумму
...
KeyCode[8] := GetCRC32(KeyCode, 7); // И использовать в преобразовании её?
...
Сергей М. (2007-12-13 12:48:00) [45]
> Slym © (13.12.07 12:35) [9]
Странно, что для "ускорения" ты оптимизировал работу с буфером, но при этом свел на нет преимущество while над repeat в части производительности
Slym (2007-12-13 12:35:00) [46]так чуть быстрее:
function GetCRC32(const Buffer; Size: Integer): Byte;
const
CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
var Buf:PByteArray;
begin
Buf:=@Buffer;
Result:=0;
repeat
Result:=CRCTable[Result xor Buf^];
inc(Buf);
Dec(Size);
until Size=0;
end;
Сергей М. (2007-12-13 11:04:00) [47]
function GetCRC32(const Buffer; Size: Integer): Byte
const
CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
var
i: Integer;
begin
Result := 0;
for i := 0 to Size - 1 do
Result := CRCTable[Result xor PByteArray(@Buffer)[i]];
end;
Пример использования ф-ции для твоегослучая:
var
KeyCode: array[1..8] of byte; //код Dallas TouchMemory
..
KeyCode[8] := GetCRC32(KeyCode, 7);
XerSon (2007-12-13 10:56:00) [48]
> Сергей М. © (13.12.07 10:26) [6]
>
> Так тебе надо именно полную или функцию
> для расчета CRC для использования в алгоритме преобразования
> ?
Если возможно, то полную функцию преобразования а если это будет не скромно, то расчета CRC!
Сергей М. (2007-12-13 10:26:00) [49]Так тебе надо именно полную функцию преобразования или функцию для расчета CRC для использования в алгоритме преобразования ?
XerSon (2007-12-13 10:19:00) [50]
> Anatoly Podgoretsky © (13.12.07 10:16) [3]
>
> > XerSon (13.12.2007 10:07:00) [0]
>
> А это и есть код на Дельфи, или ты не умеешь оформить это
> в виде функции.
Нет не умею! С чем и обратился!
korneley (2007-12-13 10:18:00) [51]Добавить служебных слов. Типа,
function, const, var. Да, иjне забыть описАть.
Anatoly Podgoretsky (2007-12-13 10:16:00) [52]> XerSon (13.12.2007 10:07:00) [0]
А это и есть код на Дельфи, или ты не умеешь оформить это в виде функции.
XerSon (2007-12-13 10:16:00) [53]
> Сергей М. © (13.12.07 10:13) [1]
>
> Что требуется от функции ?
>
> Опиши назначение и тип входных параметров (если имеются)
> и результата
ТУ
***
Для преобразования кода карточек Виганд в формат кода Dallas TouchMemory необходимо дополнить код Виганд нулевыми битами до 7-ми байт и посчитать для них циклическую контрольную сумму:
8-й байт 5-7 байт 2-4 байт 1-й байт
CRC дополнение до 7-ми байт код Вигант 01
Т.е. на примере кода 011 55982 получается следующий код:
8-й байт 7-й байт 6-й байт 5-й байт 4-й байт 3-й байт 2-й байт 1-й байт
CRC дополнение код Вигант дополнение
011 55982
05 00 00 00 0B DA AE 01
Циклическая контрольная сумма получается по правилу фирмы Dallas. Расчет осуществляется следующим образом:
CRCTable : array [0..255] of byte = (
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53);
KeyCode: array[1..8] of byte;
KeyCode[ 8 ] := 0;
For j := 1 to 7 do
KeyCode[ 8 ] := CRCTable[ KeyCode[ 8 ] xor KeyCode[ j ] ];
Полученный 8-ми байтный код можно заносить в БД для использования в АРМ «Орион».
***
Вот собственно и все!
Сергей М. (2007-12-13 10:13:00) [54]Что требуется от функции ?
Опиши назначение и тип входных параметров (если имеются) и результата