#include <stdio.h>
#include <stdint.h>
int main(void) {
// your code goes here
uint8_t crc = 0xFF;
uint8_t crc_new = 0;
uint32_t input_data = 0xD07A65;
// uint32_t input_data = 0xA0CA85;
//uint32_t input_data = 0x3B007C;
for (int i = 23; i >= 0; i--)
{
//CRC[7] in bit 0
uint32_t crc_xor = (crc & 0x80) >> 7;
// if (crc_xor)
// {
// crc_xor = 0x
// }
//CRC_NEW = CRC << 1
crc_new = crc << 1;
//crc_new_bit_4 = crc_new[4] ^ crc[7]
uint8_t crc_new_bit_4 = (crc_new & 0x10) ^ (crc_xor << 4);
uint8_t crc_new_bit_3 = (crc_new & 0x8) ^ (crc_xor << 3);
uint8_t crc_new_bit_2 = (crc_new & 0x4) ^ (crc_xor << 2);
uint32_t crc_new_bit_0 = (input_data & (1 << i)) ^ (crc_xor << i);
if (crc_new_bit_4 & 0x10)
{
crc_new |= 0x10;
}
else
{
crc_new &= ~0x10;
}
if (crc_new_bit_3 & 0x8)
{
crc_new |= 0x8;
}
else
{
crc_new &= ~0x8;
}
if (crc_new_bit_2 & 0x4)
{
crc_new |= 0x4;
}
else
{
crc_new &= ~0x4;
}
if (crc_new_bit_0 & (1 << i))
{
crc_new |= 0x1;
}
else
{
crc_new &= ~0x1;
}
crc = crc_new;
}
crc ^= 0xFF;
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdWludDhfdCBjcmMgPSAweEZGOwoJdWludDhfdCBjcmNfbmV3ID0gMDsKCSB1aW50MzJfdCBpbnB1dF9kYXRhID0gMHhEMDdBNjU7CgkvLyB1aW50MzJfdCBpbnB1dF9kYXRhID0gMHhBMENBODU7CgkvL3VpbnQzMl90IGlucHV0X2RhdGEgPSAweDNCMDA3QzsKCWZvciAoaW50IGkgPSAyMzsgaSA+PSAwOyBpLS0pCgl7CgkJLy9DUkNbN10gaW4gYml0IDAKCQl1aW50MzJfdCBjcmNfeG9yID0gKGNyYyAmIDB4ODApID4+IDc7CgkJLy8gaWYgKGNyY194b3IpCgkJLy8gewoJCS8vIAljcmNfeG9yID0gMHgKCQkvLyB9CgkJLy9DUkNfTkVXID0gQ1JDIDw8IDEKCQljcmNfbmV3ID0gY3JjIDw8IDE7CgkJLy9jcmNfbmV3X2JpdF80ID0gY3JjX25ld1s0XSBeIGNyY1s3XQoJCXVpbnQ4X3QgY3JjX25ld19iaXRfNCA9IChjcmNfbmV3ICYgMHgxMCkgXiAoY3JjX3hvciA8PCA0KTsKCQl1aW50OF90IGNyY19uZXdfYml0XzMgPSAoY3JjX25ldyAmIDB4OCkgXiAoY3JjX3hvciA8PCAzKTsKCQl1aW50OF90IGNyY19uZXdfYml0XzIgPSAoY3JjX25ldyAmIDB4NCkgXiAoY3JjX3hvciA8PCAyKTsKCQl1aW50MzJfdCBjcmNfbmV3X2JpdF8wID0gKGlucHV0X2RhdGEgJiAoMSA8PCBpKSkgXiAoY3JjX3hvciA8PCBpKTsKCQlpZiAoY3JjX25ld19iaXRfNCAmIDB4MTApCgkJewoJCQljcmNfbmV3IHw9IDB4MTA7CgkJfQoJCWVsc2UKCQl7CgkJCWNyY19uZXcgJj0gfjB4MTA7CgkJfQoJCWlmIChjcmNfbmV3X2JpdF8zICYgMHg4KQoJCXsKCQkJY3JjX25ldyB8PSAweDg7CgkJfQoJCWVsc2UKCQl7CgkJCWNyY19uZXcgJj0gfjB4ODsKCQl9CgkJaWYgKGNyY19uZXdfYml0XzIgJiAweDQpCgkJewoJCQljcmNfbmV3IHw9IDB4NDsKCQl9CgkJZWxzZQoJCXsKCQkJY3JjX25ldyAmPSB+MHg0OwoJCX0KCQlpZiAoY3JjX25ld19iaXRfMCAmICgxIDw8IGkpKQoJCXsKCQkJY3JjX25ldyB8PSAweDE7CgkJfQoJCWVsc2UKCQl7CgkJCWNyY19uZXcgJj0gfjB4MTsKCQl9CgkJY3JjID0gY3JjX25ldzsKCQkKCX0KCWNyYyBePSAweEZGOwoJcHJpbnRmKCJjcmM9JVgiLCBjcmMpOwoJcmV0dXJuIDA7Cn0K