fork download
  1. #include <stdint.h>
  2. #include <stdio.h>
  3.  
  4. uint16_t crc16(uint8_t *data, uint16_t length) {
  5. uint16_t crc = 0xFFFF; // Инициализация контрольной суммы
  6. uint16_t polynomial = 0x1021;
  7.  
  8. for (uint16_t i = 0; i < length; i++) {
  9. crc ^= (data[i] << 8); // Вставляем байт в старшие биты CRC
  10. for (uint8_t j = 0; j < 8; j++) {
  11. if (crc & 0x8000) {
  12. crc = (crc << 1) ^ polynomial; // Сдвигаем и применяем полином
  13. } else {
  14. crc <<= 1; // Просто сдвигаем
  15. }
  16. }
  17. }
  18.  
  19. return crc; // Возвращаем итоговый CRC
  20. }
  21.  
  22. int main() {
  23. uint8_t csend_DATA[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  24. 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C,
  25. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xF8};
  26.  
  27. uint16_t crc = crc16(csend_DATA, sizeof(csend_DATA)/sizeof(csend_DATA[0]));
  28. printf("CRC-16: 0x%04X\n", crc); // Выводим результат
  29. return 0;
  30. }
  31.  
  32.  
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
CRC-16: 0xE0E8