environment_monitoring_app/lib/serial/utils/crc_calculator.dart
2025-08-04 15:11:24 +08:00

19 lines
536 B
Dart

// utils/crc_calculator.dart
import 'dart:typed_data';
class Crc16Ccitt {
static String computeCrc16Ccitt(Uint8List bytes) {
int crc = 0xFFFF; // Initial value
int polynomial = 0x1021; // Matches Java's 0x1021
for (int b in bytes) {
for (int i = 0; i < 8; i++) {
bool bit = ((b >> (7 - i) & 1) == 1);
bool c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
}
crc &= 0xffff;
return crc.toRadixString(16).padLeft(4, '0').toUpperCase();
}
}