import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/services.dart'; //TODO:int->两个字节 List 低字节在前,高字节在后(大端存储)=>嵌入式小端接收(协议用到) 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)){ return 0; } int value = (dataDetail[index +1] & 0xff) << 8 | (dataDetail[index] & 0xff); return _toInt16(value); } int _toInt16(int value){ var buffer = Int16List(1).buffer; var bData = ByteData.view(buffer); bData.setInt16(0, value); int outputValue = bData.getInt16(0); return outputValue; } 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]); return _toInt32(value); } int _toInt32(int value){ var buffer = Int32List(2).buffer; var bData = ByteData.view(buffer); bData.setInt32(0, value); int outputValue = bData.getInt32(0); return outputValue; } List intToInt8List(int value) =>[value]; List intToByte2ListHigh(int value) => [value,value >> 8]; //TODO:int->4个字节List 低字节在前,高字节在后(大端存储) 1byte = 8bit List intToByte4ListHigh(int value) => [value, value >> 8, value >> 16, value >> 24]; 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)){ return 0; } int value = (dataDetail[index + 1]) << 8 | dataDetail[index]; return _toUInt16(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){ 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]); return _toUInt32(value); } int _toUInt32(int value){ var buffer = Int32List(2).buffer; var bData = ByteData.view(buffer); bData.setInt32(0, value); int outputValue = bData.getUint32(0); return outputValue; } 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){ } return result; } int checkSum(List data) { int sum = 0; for(int v in data){ sum ^= v; } return sum; } Future> loadAssetsFile(String assetsPath) async{ var byteData = await rootBundle.load(assetsPath); return byteData.buffer.asUint8List().toList(); } //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 == null || data.length == 0){ return []; } int totalLength = data.length; if(average >= totalLength){ return data; } if(index*average > totalLength){ if((index - 1)*average > totalLength){ return []; }else{ int tempCount = average*(index - 1); return data.sublist(tempCount,totalLength); } }else{ return data.sublist(average*(index - 1),average*index); } } List reverseList(List srcData){ print('srcData:$srcData'); //[1,3] int srcLen = srcData.length; int halfLen = srcLen ~/2; List dstData = []; dstData.addAll(srcData); 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); } print('dstData:$dstData'); return dstData; } //TODO:int->两个字节 List 高字节在前,低字节在后(小端存储) 本工程只有配置 WiFi用到的!!!! List intToByte2ListLow(int value) =>[value >> 8,value]; int dealWeekDays({ required int mon, required int tue, required int wed, required int thu, 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 result = ''; codeUnits.forEach((value){ result += value.toRadixString(16).padLeft(2,'0'); }); return result; } String asciiString(List codeUnits){ String result = ''; codeUnits.forEach((value){ result += String.fromCharCode(value); }); return result; } String utf8String(List codeUnits){ return utf8.decode(codeUnits); } bool compareTwoList({List? list1,List? list2}) { if(list1!.length != list2!.length)return false; int ctn = list1.length; for(int i = 0; i < ctn;i++){ int v1 = list1[i]; int v2 = list2[i]; if(v1 != v2){ print('不包含 $i'); return false; } } return true; } List encodeStringToInt(String input)=>utf8.encode(input);