#include <stdio.h>
#include <stdlib.h>
typedef char Int8;
typedef unsigned char Uint8;
typedef unsigned short Uint16;
typedef short Int16;
typedef unsigned int Uint32;
typedef int Int32;
typedef float Float32;
typedef long double Float64;
typedef long long Int64;
typedef unsigned long long Uint64;
//Uint8 tx_data1[] = { 0x03,0xfb,0x01,0x00,0x0e,0x00,0x32,0x11,0x03,0x16,0x05,0xf0,0x1a,0x05,0xf0,0x1e,0x00,0x00,0x22,0x00,
// 0x00,0x25,0x0c,0x29,0x10,0x0c,0xb6,0xa9}; //0xa9b60c
//Uint8 tx_data1[] = { 0x41,0xfb,0x01,0x00,0x0e,0x00,0x32,0x11,0x03,0x16,0x01,0x90,0x63,0x28,0x0b}; // 0x0b2863
//Uint8 tx_data1[] = { 0x41,0xfb,0x01,0x00,0x0e,0x00,0x32,0x11,0x03,0x16,0x01,0xf0,0x14,0x49,0x20}; // 0x204914
Uint8 tx_data1[] = { 0x41,0xfb,0x01,0x00,0x0e,0x00,0x32,0x11,0x03,0x16,0x05,0xf0,0xd4,0x29,0xcb}; // 0x29cbd4
//位翻转函数
Uint32 Reflect(Uint32 ref,Uint8 ch)
{
int i;
Uint32 value = 0;
for( i = 1; i < ( ch + 1 ); i++ )
{
if( ref & 1 )
value |= 1 << ( ch - i );
ref >>= 1;
}
return value;
}
Uint32 crc24_bit(Uint8 *ptr, Uint32 len, Uint32 gx)
{
Uint8 i;
Uint32 crc = 0xffffffff;
while( len-- )
{
for( i = 1; i != 0; i <<= 1 )
{
if( ( crc & 0x800000 ) != 0 )
{
crc <<= 1;
crc ^= gx;
}
else
crc <<= 1;
if( ( *ptr & i ) != 0 )
crc ^= gx;
}
ptr++;
}
return ( Reflect(crc,24) ^ 0xffffff );
}
int main()
{
Uint8 *data = tx_data1;
Uint8 dataLen = sizeof(tx_data1) -3;
printf("Slow CRC by bit : %08x\n",crc24_bit( data, dataLen, 0xbba1b5 ));//多项式0xbba1b5
}
GRPS LLC层FCS CRC-24校验算法
最新推荐文章于 2023-10-26 15:41:12 发布