Implementation of CRC16 using polynomial 0x8005 = X^16 + X^15 + X^2 + 1
Dependents: Manchester_Transmitter Manchester_Receiver ManchesterUART_Transmitter ManchesterUART_Receiver
Fork of CRC16 by
Diff: CRC16.cpp
- Revision:
- 3:3f5622979e77
- Parent:
- 2:a01521fb2fe1
--- a/CRC16.cpp Mon May 22 09:32:41 2017 +0000 +++ b/CRC16.cpp Sun Sep 03 08:28:01 2017 +0000 @@ -1,6 +1,8 @@ /* * This is a fork of the CRC16 library COPYRIGHT(c) Emilie Laverge * published at [https://developer.mbed.org/users/EmLa/code/CRC16/] + * using the polynomial 0x8005: X^16 + X^15 + X^2 + 1. + * Default initial CRC value = 0xFFFF * * Modified by Zoltan Hudak */ @@ -44,13 +46,14 @@ 0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202 }; -unsigned short CRC16::calc(char input[], int length) { - unsigned short result = 0; +unsigned short CRC16::calc(char input[], int length, unsigned short crc /*=0x0000*/) { for(int i = 0; i < length; i++) { - unsigned short tableValue = TABLE[((result >> 8) ^ *(char*)input++) & SHIFTER]; - result = (result << 8) ^ tableValue; + unsigned short tableValue = TABLE[((crc >> 8) ^ *(char*)input++) & SHIFTER]; + crc = (crc << 8) ^ tableValue; } - return result; + return crc; } + +