From d1f12c62b974edb6be4a5350efe3be1eea3435d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDaisyWu=E2=80=9D?= <“18682150237@163.com”> Date: Wed, 4 Dec 2024 17:24:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=09=E8=A7=A3=E5=86=B3=E6=98=9F=E5=9B=BE?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=BB=93=E6=9E=84=E4=B8=ADCRC32=20=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E6=A0=A1=E9=AA=8C=E4=B8=8D=E9=80=9A=E8=BF=87=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=B9=B6=E6=9C=AC=E5=9C=B0=E9=AA=8C=E8=AF=81=E6=88=90?= =?UTF-8?q?=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/lib/main.dart b/lib/main.dart index d4898717..b6c301cc 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,9 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'package:crc/crc.dart'; +import 'package:crclib/catalog.dart'; +import 'package:crypto/crypto.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bugly/flutter_bugly.dart'; @@ -105,3 +108,54 @@ void findChineseCharacters(Directory directory) { bool hasChineseCharacters(String input) { return RegExp(r'[\u4e00-\u9fa5]').hasMatch(input); } + + +//ToDo: 挪到可用位置这里可删掉 +/** + * 计算 CRC16 校验值 +void calculateCrc16() { + const String payload = 'hello'; + + // 将字符串转换为 Uint8List + final Uint8List uint8Payload = stringToUint8List(payload); + + // 使用自定义 CRC32 算法 + final int crc32Value = crc32Uint16(uint8Payload); + + print('************ input 为 "$payload" 的 CRC32 值为 $crc32Value'); +} + +// 将字符串转换为 Uint8List +Uint8List stringToUint8List(String input) { + return Uint8List.fromList(utf8.encode(input)); +} + +// 自定义 CRC32 实现 +int crc32Uint16(Uint8List data) { + const int polynomial = 0xD5828281; + + // 创建 CRC32 表 + final List table = List.generate(256, (i) { + int crc = i; + for (int j = 0; j < 8; j++) { + if ((crc & 1) != 0) { + crc = (crc >> 1) ^ polynomial; + } else { + crc >>= 1; + } + } + return crc; + }); + + // 计算 CRC32 校验值 + int crc = 0xFFFFFFFF; + for (final int byte in data) { + crc = (crc >> 8) ^ table[(crc ^ byte) & 0xFF]; + } + + crc ^= 0xFFFFFFFF; + + // 返回 CRC32 的低 16 位 + return crc & 0xFFFF; +} + */