|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите разобраться с алгоритмом!
Нужно вычислить CRC строки(HEX) например : 0xE0, 0x12, 0x34, 0xFF, 0xFF
в мануале есть описание но как реализировать ето в Delphi не понимаю. Вот пример : Код:
The 16-bit crc sum calculation goes as bellow: 1) crc := 0x147A 2) for byte b = 0xE0: - crc := rl(crc) = rl(0x147A) = 0x28F4 - crc := crc xor 0xFFFF = 0x28F4 xor 0xFFFF = 0xD70B - crc := crc + crc.high + b = 0xD70B + 0xD7 + 0xE0 = 0xD8C2 3) for byte b = 0x12: - crc := rl(crc) = rl(0xD8C2) = 0xB185 - crc := crc xor 0xFFFF = 0xB185 xor 0xFFFF = 0x4E7A - crc := crc + crc.high + b = 0x4E7A + 0x4E + 0x12 = 0x4EDA 4) for byte b = 0x34: - crc := rl(crc) = rl(0x4EDA) = 0x9DB4 - crc := crc xor 0xFFFF = 0x9DB4 xor 0xFFFF = 0x624B - crc := crc + crc.high + b = 0x624B + 0x62 + 0x34 = 0x62E1 5) for byte b = 0xFF: - crc := rl(crc) = rl(0x62E1) = 0xC5C2 - crc := crc xor 0xFFFF = 0xC5C2 xor 0xFFFF = 0x3A3D - crc := crc + crc.high + b = 0x3A3D + 0x3A + 0xFF = 0x3B76 6) for byte b = 0xFF: - crc := rl(crc) = rl(0x3B76) = 0x76EC - crc := crc xor 0xFFFF = 0x76EC xor 0xFFFF = 0x8913 - crc := crc + crc.high + b = 0x8913 + 0x89 + 0xFF = 0x8A9B And the final crc sum is 0x8A9B. Допоможіть будьласка розібратися в цьому питанні. |
#2
|
||||
|
||||
Если предположить, что функция rl(x) - это сдвиг на 1 бит влево, а crc.high это старший байт слова содержащегося в crc, тогда вроде все тривиально.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
Цитата:
Страдалецъ Если не трудно то можно подробнее!? Извиняюсь но я не очень пока разбираюсь в такой математике. |
#4
|
||||
|
||||
Вот так будет, если мое первоначальное предположение верно:
Код:
program Project5; {$APPTYPE CONSOLE} uses SysUtils; Const b: Array[1..5] of Byte = ($E0,$12,$34,$FF,$FF); Var crc: word; i: Integer; begin crc := $147A; for i := 1 to 5 do begin crc := crc shl 1; crc := crc xor $FFFF; crc := crc + Hi(crc) + b[i]; end; WriteLn(crc); ReadLn; end. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 10.09.2010 в 19:05. |