add crc poly impl.

pull/3/head
Wang Yaofu 4 years ago committed by GitHub
parent d1c7b74810
commit 4b1aa6d7af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,104 @@
/*
** The crc32 is licensed under the Apache License, Version 2.0, and a copy of the license is included in this file.
**
**Author:Wang Yaofu voipman@qq.com
**Description: The source file to calc crc poly.
*/
#include <stdlib.h>
#include "crc_poly.h"
// LSB-first
uint8_t crc8_poly_lsb(uint8_t poly, uint8_t value) {
uint8_t crc;
uint8_t j;
crc = value & 0xFF;
for (j = 8; j > 0; --j) {
if (crc & 1) {
crc = (crc >> 1) ^ poly;
} else {
crc = crc >> 1;
}
}
return crc;
}
uint8_t crc8_poly_msb(uint8_t poly, uint8_t value) {
uint8_t crc;
uint8_t j;
uint8_t mask = 0x80;
crc = value & 0xFF;
for (j = 8; j > 0; --j) {
if (crc & mask) {
crc = (crc << 1) ^ poly;
} else {
crc = crc << 1;
}
}
return crc;
}
// LSB-first
uint16_t crc16_poly_lsb(uint16_t poly, uint16_t value) {
uint16_t crc;
uint16_t j;
crc = value & 0xFF;
for (j = 16; j > 0; --j) {
if (crc & 1) {
crc = (crc >> 1) ^ poly;
} else {
crc = crc >> 1;
}
}
return crc;
}
// msb first
uint16_t crc16_poly_msb(uint16_t poly, uint16_t value) {
uint16_t crc;
uint16_t j;
crc = value & 0xFF;
for (j = 16; j > 0; --j) {
if (crc & 0x8000) {
crc = (crc << 1) ^ poly;
} else {
crc = crc << 1;
}
}
return crc;
}
// LSB-first
uint32_t crc32_poly(uint32_t poly, uint16_t value) {
uint32_t crc;
uint16_t j;
crc = value & 0xFF;
for (j = 8; j > 0; --j) {
if (crc & 1) {
crc = (crc >> 1) ^ poly;
} else {
crc = crc >> 1;
}
}
return crc;
}
// LSB-first
uint64_t crc64_poly(uint64_t poly, uint16_t value) {
uint64_t crc;
uint16_t j;
crc = value & 0xFF;
for (j = 8; j > 0; --j) {
if (crc & 1) {
crc = (crc >> 1) ^ poly;
} else {
crc = (crc >> 1);
}
}
return crc;
}
Loading…
Cancel
Save