diff --git a/star_lock/lib/blue/io_tool/io_tool.dart b/star_lock/lib/blue/io_tool/io_tool.dart index 45e2a442..7f080dca 100644 --- a/star_lock/lib/blue/io_tool/io_tool.dart +++ b/star_lock/lib/blue/io_tool/io_tool.dart @@ -17,38 +17,57 @@ String uint8ToHex(Uint8List byteArr) { return ""; } Uint8List result = Uint8List(byteArr.length << 1); - var hexTable = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; //16进制字符表 + var hexTable = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F' + ]; //16进制字符表 for (var i = 0; i < byteArr.length; i++) { var bit = byteArr[i]; //取传入的byteArr的每一位 var index = bit >> 4 & 15; //右移4位,取剩下四位 var i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2 result[i2] = hexTable[index].codeUnitAt(0); //左边的值取字符表,转为Unicode放进resut数组 index = bit & 15; //取右边四位 - result[i2 + 1] = hexTable[index].codeUnitAt(0); //右边的值取字符表,转为Unicode放进resut数组 + result[i2 + 1] = + hexTable[index].codeUnitAt(0); //右边的值取字符表,转为Unicode放进resut数组 } return String.fromCharCodes(result); //Unicode转回为对应字符,生成字符串返回 } //TODO:int->两个字节 List 低字节在前,高字节在后(大端存储)=>嵌入式小端接收(协议用到) -int byteInt8(List dataDetail, int index)=>_toInt8(dataDetail[index]); -int _toInt8(int value){ +int byteInt8(List dataDetail, int index) => _toInt8(dataDetail[index]); +int _toInt8(int value) { var buffer = Int8List(4).buffer; var bData = ByteData.view(buffer); bData.setInt8(0, value); return bData.getInt8(0); } -int byteInt16(List dataDetail, int index)=>_byteInt16(dataDetail, index); -int _byteInt16(List dataDetail, int index){ - if(checkListIndex(dataDetail, index, 2)){ +int byteInt16(List dataDetail, int index) => _byteInt16(dataDetail, index); +int _byteInt16(List dataDetail, int index) { + if (checkListIndex(dataDetail, index, 2)) { return 0; } - int value = (dataDetail[index +1] & 0xff) << 8 | (dataDetail[index] & 0xff); + int value = (dataDetail[index + 1] & 0xff) << 8 | (dataDetail[index] & 0xff); return _toInt16(value); } -int _toInt16(int value){ + +int _toInt16(int value) { var buffer = Int16List(1).buffer; var bData = ByteData.view(buffer); bData.setInt16(0, value); @@ -56,18 +75,19 @@ int _toInt16(int value){ return outputValue; } -int byteInt32(List dataDetail, int index)=>_byteInt32(dataDetail, index); -int _byteInt32(List dataDetail, int index){ - if(checkListIndex(dataDetail, index, 4)){ +int byteInt32(List dataDetail, int index) => _byteInt32(dataDetail, index); +int _byteInt32(List dataDetail, int index) { + if (checkListIndex(dataDetail, index, 4)) { return 0; } - int value = ((0xFF & - dataDetail[(index + 3)]) << 24 | (0xFF & - dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF & - dataDetail[index]); + int value = ((0xFF & dataDetail[(index + 3)]) << 24 | + (0xFF & dataDetail[index + 2]) << 16 | + (0xFF & dataDetail[index + 1]) << 8 | + 0xFF & dataDetail[index]); return _toInt32(value); } -int _toInt32(int value){ + +int _toInt32(int value) { var buffer = Int32List(2).buffer; var bData = ByteData.view(buffer); bData.setInt32(0, value); @@ -75,51 +95,54 @@ int _toInt32(int value){ return outputValue; } -List intToInt8List(int value) =>[value]; +List intToInt8List(int value) => [value]; -List intToByte2ListHigh(int value) => [value,value >> 8]; +List intToByte2ListHigh(int value) => [value, value >> 8]; //TODO:int->4个字节List 低字节在前,高字节在后(大端存储) 1byte = 8bit -List intToByte4ListHigh(int value) => [value, value >> 8, value >> 16, value >> 24]; +List intToByte4ListHigh(int value) => + [value, value >> 8, value >> 16, value >> 24]; -int byteUInt8(List dataDetail, int index)=>_toUInt8(dataDetail[index]); -int _toUInt8(int value){ +int byteUInt8(List dataDetail, int index) => _toUInt8(dataDetail[index]); +int _toUInt8(int value) { var buffer = Int8List(1).buffer; var bData = ByteData.view(buffer); bData.setInt8(0, value); return bData.getUint8(0); } -int byteUInt16(List dataDetail, int index)=>_byteUInt16(dataDetail, index); -_byteUInt16(List dataDetail, int index){ - if(checkListIndex(dataDetail, index, 2)){ +int byteUInt16(List dataDetail, int index) => + _byteUInt16(dataDetail, index); +_byteUInt16(List dataDetail, int index) { + if (checkListIndex(dataDetail, index, 2)) { return 0; } int value = (dataDetail[index + 1]) << 8 | dataDetail[index]; return _toUInt16(value); } -int _toUInt16(int value){ + +int _toUInt16(int value) { var buffer = Uint16List(2).buffer; var bData = ByteData.view(buffer); bData.setInt16(0, value); return bData.getUint16(0); } +int byteUInt32(List dataDetail, int index) => + _byteUInt32(dataDetail, index); -int byteUInt32(List dataDetail, int index)=>_byteUInt32(dataDetail, index); - -int _byteUInt32(List dataDetail, int index){ - if(checkListIndex(dataDetail, index, 4)){ +int _byteUInt32(List dataDetail, int index) { + if (checkListIndex(dataDetail, index, 4)) { return 0; } - int value = ((0xFF & - dataDetail[(index + 3)]) << 24 | (0xFF & - dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF & - dataDetail[index]); + int value = ((0xFF & dataDetail[(index + 3)]) << 24 | + (0xFF & dataDetail[index + 2]) << 16 | + (0xFF & dataDetail[index + 1]) << 8 | + 0xFF & dataDetail[index]); return _toUInt32(value); } -int _toUInt32(int value){ +int _toUInt32(int value) { var buffer = Int32List(2).buffer; var bData = ByteData.view(buffer); bData.setInt32(0, value); @@ -127,84 +150,101 @@ int _toUInt32(int value){ return outputValue; } -bool checkListIndex(List dataDetail, int index, int offsetLength){ - if(dataDetail == null){ +bool checkListIndex(List dataDetail, int index, int offsetLength) { + if (dataDetail == null) { print('❌解析 dataDetail == null'); return true; } var len = dataDetail.length; bool result = index + offsetLength > len; - if(result){ - } + if (result) {} return result; } -int checkSum(List data) { +int checkSum(List data) { int sum = 0; - for(int v in data){ + for (int v in data) { sum ^= v; } return sum; } -Future> loadAssetsFile(String assetsPath) async{ - var byteData = await rootBundle.load(assetsPath); +Future> loadAssetsFile(String assetsPath) async { + var byteData = await rootBundle.load(assetsPath); return byteData.buffer.asUint8List().toList(); } +//获取截取后的数组 +List> splitList(List list, int len) { + if (len <= 1) { + return [list]; + } -//TODO:获取数据包分包后包的数量 -int getPackageCount(List data,{required int averageLen}){ - int len = data.length; - return len%averageLen > 0 ? (len~/averageLen + 1) : len~/averageLen; + List> result = []; + int index = 1; + + while (true) { + if (index * len < list.length) { + List temp = list.skip((index - 1) * len).take(len).toList(); + result.add(temp); + index++; + continue; + } + List temp = list.skip((index - 1) * len).toList(); + result.add(temp); + break; + } + return result; } -List getSubData({ - required int index, - required int average, - required List data -}){ - if(data.isEmpty){ +//TODO:获取数据包分包后包的数量 +int getPackageCount(List data, {required int averageLen}) { + int len = data.length; + return len % averageLen > 0 ? (len ~/ averageLen + 1) : len ~/ averageLen; +} + +List getSubData( + {required int index, required int average, required List data}) { + if (data.isEmpty) { return []; } int totalLength = data.length; - if(average >= totalLength){ + if (average >= totalLength) { return data; } - if(index*average > totalLength){ - if((index - 1)*average > totalLength){ + if (index * average > totalLength) { + if ((index - 1) * average > totalLength) { return []; - }else{ - int tempCount = average*(index - 1); - return data.sublist(tempCount,totalLength); + } else { + int tempCount = average * (index - 1); + return data.sublist(tempCount, totalLength); } - }else{ - return data.sublist(average*(index - 1),average*index); + } else { + return data.sublist(average * (index - 1), average * index); } } -List reverseList(List srcData){ +List reverseList(List srcData) { print('srcData:$srcData'); //[1,3] int srcLen = srcData.length; - int halfLen = srcLen ~/2; + int halfLen = srcLen ~/ 2; List dstData = []; dstData.addAll(srcData); - for(int i =0; i < halfLen; i++){ + for (int i = 0; i < halfLen; i++) { int begin = i; - int end = srcLen-i-1; - List beginData = srcData.sublist(begin,begin+1); - List endData = srcData.sublist(end,end + 1); - dstData.replaceRange(begin, begin+1, endData); - dstData.replaceRange(end, end+1, beginData); + int end = srcLen - i - 1; + List beginData = srcData.sublist(begin, begin + 1); + List endData = srcData.sublist(end, end + 1); + dstData.replaceRange(begin, begin + 1, endData); + dstData.replaceRange(end, end + 1, beginData); } print('dstData:$dstData'); return dstData; } //TODO:int->两个字节 List 高字节在前,低字节在后(小端存储) 本工程只有配置 WiFi用到的!!!! -List intToByte2ListLow(int value) =>[value >> 8,value]; - +List intToByte2ListLow(int value) => [value >> 8, value]; int dealWeekDays({ required int mon, @@ -214,37 +254,37 @@ int dealWeekDays({ required int fri, required int sat, required int sun, -}){ +}) { return mon + tue * 2 + wed * 4 + thu * 8 + fri * 16 + sat * 32 + sun * 64; } -String radixString(List codeUnits){ +String radixString(List codeUnits) { String result = ''; - codeUnits.forEach((value){ - result += value.toRadixString(16).padLeft(2,'0'); + codeUnits.forEach((value) { + result += value.toRadixString(16).padLeft(2, '0'); }); return result; } -String asciiString(List codeUnits){ +String asciiString(List codeUnits) { String result = ''; - codeUnits.forEach((value){ + codeUnits.forEach((value) { result += String.fromCharCode(value); }); return result; } -String utf8String(List codeUnits){ +String utf8String(List codeUnits) { return utf8.decode(codeUnits); } -bool compareTwoList({List? list1,List? list2}) { - if(list1!.length != list2!.length)return false; +bool compareTwoList({List? list1, List? list2}) { + if (list1!.length != list2!.length) return false; int ctn = list1.length; - for(int i = 0; i < ctn;i++){ + for (int i = 0; i < ctn; i++) { int v1 = list1[i]; int v2 = list2[i]; - if(v1 != v2){ + if (v1 != v2) { print('不包含 $i'); return false; } @@ -252,4 +292,4 @@ bool compareTwoList({List? list1,List? list2}) { return true; } -List encodeStringToInt(String input)=>utf8.encode(input); \ No newline at end of file +List encodeStringToInt(String input) => utf8.encode(input);