Lucas Teske bu gisti düzenledi 7 years ago. Düzenlemeye git
1 file changed, 30 insertions
crc.c(dosya oluşturuldu)
| @@ -0,0 +1,30 @@ | |||
| 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 | + | ||
Daha yeni
Daha eski