Which one to use
CRC-8 here is the SMBus/1-Wire-style variant (poly 0x07, init 0x00) — verified against the standard "123456789" test vector (result 0xF4). CRC-16 here is specifically CRC-16/CCITT-FALSE (poly 0x1021, init 0xFFFF, non-reflected, test vector result 0x29B1) — "CCITT" alone is ambiguous and covers several different variants across the industry (CCITT-FALSE, XMODEM with init 0x0000, AUG-CCITT with init 0x1D0F, MCRF4XX which is reflected), so double check which one your protocol actually specifies. CRC-32 (poly 0xEDB88320, reflected, standard zlib/Ethernet flavor) is the one used by gzip, PNG, and Ethernet FCS, verified against the standard "abc" test vector (result 0x352441C2). Plain XOR and sum checksums are weaker but still used in simple embedded protocols for cheap error detection. For other CRC variants (there are dozens), crccalc.com covers a much wider set.