#include <stdio.h>
#include <stdint.h>
uint8_t _crc8_update(uint8_t crc, uint8_t data)
{
uint8_t i;
crc = crc ^ data;
for (i = 0; i < 8; i++)
{
if (crc & 0x01)
crc = (crc >> 1) ^ 0x8C;
else
crc >>= 1;
}
return crc;
}
int crc8(uint8_t *darry, uint16_t sz)
{
uint8_t crc = 0;
uint8_t i;
for (i = 0; i < sz; i++)
crc = _crc8_update(crc, darry[i]);
return crc;
}
int main(void)
{
uint8_t serno[] = { 0x53, 0xe7, 0x73, 0x4c, 0x68, 0x4f, 0x03, 0x4e, 0x33 };
uint8_t crc = crc8(serno, sizeof(serno)/sizeof(uint8_t));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnVpbnQ4X3QgX2NyYzhfdXBkYXRlKHVpbnQ4X3QgY3JjLCB1aW50OF90IGRhdGEpCnsKCXVpbnQ4X3QgaTsKCQoJY3JjID0gY3JjIF4gZGF0YTsKCQoJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKCXsKCQlpZiAoY3JjICYgMHgwMSkKCQkJY3JjID0gKGNyYyA+PiAxKSBeIDB4OEM7CgkJZWxzZQoJCQljcmMgPj49IDE7Cgl9CgkKCXJldHVybiBjcmM7Cn0KCmludCBjcmM4KHVpbnQ4X3QgKmRhcnJ5LCB1aW50MTZfdCBzeikKewoJdWludDhfdCBjcmMgPSAwOwoJdWludDhfdCBpOwoKCWZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQoJCWNyYyA9IF9jcmM4X3VwZGF0ZShjcmMsIGRhcnJ5W2ldKTsKCglyZXR1cm4gY3JjOwp9CgppbnQgbWFpbih2b2lkKQp7Cgl1aW50OF90IHNlcm5vW10gPSB7IDB4NTMsIDB4ZTcsIDB4NzMsIDB4NGMsIDB4NjgsIDB4NGYsIDB4MDMsIDB4NGUsIDB4MzMgfTsKCQoJdWludDhfdCBjcmMgPSBjcmM4KHNlcm5vLCBzaXplb2Yoc2Vybm8pL3NpemVvZih1aW50OF90KSk7CglwcmludGYoIkNSQzggPSAlMDJYXG4iLCBjcmMpOwoKCXJldHVybiAwOwp9Cg==