Algorithm:
1、Ckecksum1 = 0
2、Checksum2 = 0
3、For each byte B from data array
4、Ckecksum1 = Ckecksum1 + B
5、Checksum2 = Checksum2 + Ckecksum1
6、Mask Ckecksum1 with 0xFF
7、Mask Checksum2 with 0xFF
* The result 2 bytes checksum sequence would be {Checksum1, Checksum2}.
Fletcher C语言实现
// the 8-Bit Fletcher Algorithm
uint16_t Fletcher16(uint8_t* data, int count) {
uint16_t sum1 = 0;
uint16_t sum2 = 0;
int index;
for ( index = 0; index < count; ++index ) {
sum1 = (sum1 + data[index]) & 0xFF;
sum2 = (sum2 + sum1) & 0xFF;
}
return (sum1 << 8) | sum2;
}
/******************************************************************************
** 函数:main
** 描述:main 函数,作为的程序入口
** 参数:无
** 返回:无
******************************************************************************/
int main(void)
{
uint8_t data1[] = {0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x00};
uint8_t data2[] = {0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00};
uint8_t data3[] = {0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00};
uint16_t ret1 = Fletcher16(data1, sizeof(data1));
uint16_t ret2 = Fletcher16(data2, sizeof(data2));
uint16_t ret3 = Fletcher16(data3, sizeof(data3));
}