Пакет данных типа:
Код: Выделить всё
1 2 3 4 5 6 ;байт
29 10 12 4D 00 E8 ;E8- CRC
29 10 12 45 28 C8 ;C8- CRCКод: Выделить всё
1 2 3 4 5 6 ;байт
29 10 12 4D 00 E8 ;E8- CRC
29 10 12 45 28 C8 ;C8- CRCКод: Выделить всё
unsigned char CprofilesDlg::calc_crc (char cPolinom)
{
unsigned char i,data,crc,fb,st_byt,cRazmer;
cRazmer=5;//sizeof(cArr);
st_byt=0;
crc=0x0;
cArr[0]=0x29;
cArr[1]=0x10;
cArr[2]=0x12;
cArr[3]=0x4D;
cArr[4]=0x00;
do{
data=cArr[st_byt];
for (i=0;i<8;i++)// счетчик битов в байте
{
fb =crc ^ data;
fb&=1;
crc >>= 1;
data >>= 1;
if (fb == 1)crc^=cPolinom;// полином
}
st_byt++;
}while (st_byt != cRazmer);// счетчик байтов в массиве
return crc;
}
//----------------------------------------------------------------------
void CprofilesDlg::FindPolinom(void)
{
char cEtalon=0xE8;
for(unsigned char i=0;i<0xFF;i++)
{
if(calc_crc (i) == cEtalon)
{
TRACE("polinom = %d\n",i);
}
}
TRACE("ok\n");
}
примеры в студиюAlexeus писал(а):a_skr, в большинстве случаев действительно 0х80 получается, но есть вариант где не получается.
Код: Выделить всё
29 10 12 4d 0 e8 80
29 10 12 45 28 c8 80
29 10 12 45 0 f0 80
29 10 12 3d 28 d0 80
29 10 12 3d 0 f8 80
29 10 12 35 28 d8 80
29 10 12 35 0 80 0
29 10 12 2d 28 e0 80
29 10 12 2d 0 88 0
29 10 12 25 28 e8 80
29 10 12 25 0 90 0
29 10 12 1d 28 f0 80
29 10 12 1d 0 98 0
29 10 12 15 28 f8 80
29 10 12 15 0 a0 0
29 10 12 0d 28 80 0
29 10 12 0d 0 a8 0
29 10 12 5 28 88 0
29 10 12 5 0 b0 0
29 10 0a 4d 28 c8 80
29 10 0a 4d 0 f0 80
29 10 0a 45 28 d0 80
29 10 0a 45 0 f8 80
29 10 0a 3d 28 d8 80
29 10 0a 3d 0 80 0
29 10 0a 35 28 e0 80
29 10 0a 35 0 88 0
29 10 0a 2d 28 e8 80
29 10 0a 2d 0 90 0
----------------------------------------------
29 10 12 4d 0 e8 80
39 10 12 4d 0 d8 80
49 10 12 4d 0 c8 80
69 10 12 4d 0 a8 80
----------------------------------------------
29 10 12 4d 4 e4 80
29 50 12 4d 5 a3 80
29 50 12 4d 1 a7 80
29 70 12 4d 2 86 80
28 74 12 4d 0 85 80
29 74 12 4d 0 84 80
2a 74 12 4d 0 83 80
2b 74 12 4d 0 82 80
2c 74 12 4d 0 81 80
2d 74 12 4d 0 80 80
2e 74 12 4d 0 ff 0
----------------------------------------------