crc.c
· 820 B · C
Surowy
#define POLY 0xA001
#define POLY 0x8005
unsigned crc16(unsigned crc, unsigned char *buf, size_t len)
{
while (len--) {
crc ^= *buf++;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
}
return crc;
}
int main(void)
{
unsigned crc;
unsigned char buf[] = {0x00, 0x19, 0x02 };
crc = crc16(0x0, buf, 3);
printf("%04x\n", crc);
crc = crc16(0xFFFF, buf, 3);
printf("%04x\n", crc);
return 0;
}
| 1 | #define POLY 0xA001 |
| 2 | #define POLY 0x8005 |
| 3 | unsigned crc16(unsigned crc, unsigned char *buf, size_t len) |
| 4 | { |
| 5 | while (len--) { |
| 6 | crc ^= *buf++; |
| 7 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 8 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 9 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 10 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 11 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 12 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 13 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 14 | crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1; |
| 15 | } |
| 16 | return crc; |
| 17 | } |
| 18 | |
| 19 | int main(void) |
| 20 | { |
| 21 | unsigned crc; |
| 22 | unsigned char buf[] = {0x00, 0x19, 0x02 }; |
| 23 | |
| 24 | crc = crc16(0x0, buf, 3); |
| 25 | printf("%04x\n", crc); |
| 26 | crc = crc16(0xFFFF, buf, 3); |
| 27 | printf("%04x\n", crc); |
| 28 | return 0; |
| 29 | } |
| 30 | |
| 31 |