#include <stdio.h>
unsigned char Crc8Gen_smbus(unsigned char *charP,unsigned char len) //该算法来自网络
{
int i,j;
unsigned char crc8;
crc8 = 0;
for(i=0;i<len;i++)
{
crc8 = crc8^*charP++;
for(j=0;j<8;j++)
{
if(crc8&0x80)
crc8 = (crc8<<1)^0x07;
//本来应该是crc8 ^ 0x101
//但是最高位都是1 异或必然得0 所以都吧开头的1去掉了
else
crc8 <<= 1;
}
}
return crc8 & 0xff;
}
int main()
{
unsigned char tempbuffer[15]={0x3A,0x00,0x18,0x5A,0x54,0x5A,0x46,0x31,0x30,0x30,0x30,0xFE,0xBA,0x1B };
int i=0;
tempbuffer[14]=Crc8Gen_smbus(tempbuffer,14);
for(i=0;i<15;i++)
{
printf("%x ",tempbuffer[i]);
}
printf("\n");
return 0;
}
unsigned char Crc8Gen_smbus(unsigned char *charP,unsigned char len) //该算法来自网络
{
int i,j;
unsigned char crc8;
crc8 = 0;
for(i=0;i<len;i++)
{
crc8 = crc8^*charP++;
for(j=0;j<8;j++)
{
if(crc8&0x80)
crc8 = (crc8<<1)^0x07;
//本来应该是crc8 ^ 0x101
//但是最高位都是1 异或必然得0 所以都吧开头的1去掉了
else
crc8 <<= 1;
}
}
return crc8 & 0xff;
}
int main()
{
unsigned char tempbuffer[15]={0x3A,0x00,0x18,0x5A,0x54,0x5A,0x46,0x31,0x30,0x30,0x30,0xFE,0xBA,0x1B };
int i=0;
tempbuffer[14]=Crc8Gen_smbus(tempbuffer,14);
for(i=0;i<15;i++)
{
printf("%x ",tempbuffer[i]);
}
printf("\n");
return 0;
}