Serial통신을 하는데요.... 업체로부터 아래와 같은 알고리즘을 받았습니다..
근데... C는 잘 하지도 못하지만 본지가 오래라....
잘 모르겠네요...혹시 아래의 알고리즘을 어떻게 델로 변형을 할수 있는지..
고수님들 좀 봐주십시요 ... ㅠㅠ
===================================================================
CRC16 Calculation Algorithm
Polynom: x16 + x12 + x5 + 1 → CRC_POLYNOM = 0x8408;
Start Value: 0xFFFF → CRC_PRESET = 0xFFFF;
C-Example:
unsigned int crc = CRC_PRESET;
for (i = 0; i < cnt; i++) /* cnt = number of protocol bytes without CRC */
{
crc = crc ^ (DATA[i] & 0xFF);
for (j = 0; j < 8; j++)
{
if (crc & 0x0001)
crc = (crc >> 1) ^ CRC_POLYNOM;
else
crc = (crc >> 1);
}
}
-----------------------------------------------------------------
Data[n-1] = crc & 0xFF ;
Data[n] = (crc >> 8) & 0xFF ;
델파이론 첨이라 맞는지 잘 모르것네요..
다른 고수님들이 보구서 틀린 거 있는지 확인 부탁합니다.
CONST
CRC_POLYNOM = $8408;
CRC_PRESE = $FFFF;
crc : longInt = CRC_PRESET;
i , j : integer;
for i := 0 to cnt do begin // cnt 는 프로토콜의 바이트 수
crc := crc and (DATA[i] and $FF);
for j := 0 to 8 do begin
if (crc and $0001) then crc := (crc shr 1) and CRC_POLYNOM
else crc := (crc shr 1);
end;
end;