Merge remote-tracking branch 'origin/master'

This commit is contained in:
魏少阳 2023-08-09 09:35:58 +08:00
commit 07d3cddf40

View File

@ -38,38 +38,57 @@ String uint8ToHex(Uint8List byteArr) {
return ""; return "";
} }
Uint8List result = Uint8List(byteArr.length << 1); 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++) { for (var i = 0; i < byteArr.length; i++) {
var bit = byteArr[i]; //byteArr的每一位 var bit = byteArr[i]; //byteArr的每一位
var index = bit >> 4 & 15; //4, var index = bit >> 4 & 15; //4,
var i2 = i << 1; //byteArr的每一位对应结果的两位,2 var i2 = i << 1; //byteArr的每一位对应结果的两位,2
result[i2] = hexTable[index].codeUnitAt(0); //,Unicode放进resut数组 result[i2] = hexTable[index].codeUnitAt(0); //,Unicode放进resut数组
index = bit & 15; // 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转回为对应字符, return String.fromCharCodes(result); //Unicode转回为对应字符,
} }
//TODO:int-> List ()=>() //TODO:int-> List ()=>()
int byteInt8(List<int> dataDetail, int index)=>_toInt8(dataDetail[index]); int byteInt8(List<int> dataDetail, int index) => _toInt8(dataDetail[index]);
int _toInt8(int value){ int _toInt8(int value) {
var buffer = Int8List(4).buffer; var buffer = Int8List(4).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt8(0, value); bData.setInt8(0, value);
return bData.getInt8(0); return bData.getInt8(0);
} }
int byteInt16(List<int> dataDetail, int index)=>_byteInt16(dataDetail, index); int byteInt16(List<int> dataDetail, int index) => _byteInt16(dataDetail, index);
int _byteInt16(List<int> dataDetail, int index){ int _byteInt16(List<int> dataDetail, int index) {
if(checkListIndex(dataDetail, index, 2)){ if (checkListIndex(dataDetail, index, 2)) {
return 0; 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); return _toInt16(value);
} }
int _toInt16(int value){
int _toInt16(int value) {
var buffer = Int16List(1).buffer; var buffer = Int16List(1).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt16(0, value); bData.setInt16(0, value);
@ -77,18 +96,19 @@ int _toInt16(int value){
return outputValue; return outputValue;
} }
int byteInt32(List<int> dataDetail, int index)=>_byteInt32(dataDetail, index); int byteInt32(List<int> dataDetail, int index) => _byteInt32(dataDetail, index);
int _byteInt32(List<int> dataDetail, int index){ int _byteInt32(List<int> dataDetail, int index) {
if(checkListIndex(dataDetail, index, 4)){ if (checkListIndex(dataDetail, index, 4)) {
return 0; return 0;
} }
int value = ((0xFF & int value = ((0xFF & dataDetail[(index + 3)]) << 24 |
dataDetail[(index + 3)]) << 24 | (0xFF & (0xFF & dataDetail[index + 2]) << 16 |
dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF & (0xFF & dataDetail[index + 1]) << 8 |
dataDetail[index]); 0xFF & dataDetail[index]);
return _toInt32(value); return _toInt32(value);
} }
int _toInt32(int value){
int _toInt32(int value) {
var buffer = Int32List(2).buffer; var buffer = Int32List(2).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt32(0, value); bData.setInt32(0, value);
@ -96,51 +116,54 @@ int _toInt32(int value){
return outputValue; return outputValue;
} }
List<int> intToInt8List(int value) =>[value]; List<int> intToInt8List(int value) => [value];
List<int> intToByte2ListHigh(int value) => [value,value >> 8]; List<int> intToByte2ListHigh(int value) => [value, value >> 8];
//TODO:int->4List () 1byte = 8bit //TODO:int->4List () 1byte = 8bit
List<int> intToByte4ListHigh(int value) => [value, value >> 8, value >> 16, value >> 24]; List<int> intToByte4ListHigh(int value) =>
[value, value >> 8, value >> 16, value >> 24];
int byteUInt8(List<int> dataDetail, int index)=>_toUInt8(dataDetail[index]); int byteUInt8(List<int> dataDetail, int index) => _toUInt8(dataDetail[index]);
int _toUInt8(int value){ int _toUInt8(int value) {
var buffer = Int8List(1).buffer; var buffer = Int8List(1).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt8(0, value); bData.setInt8(0, value);
return bData.getUint8(0); return bData.getUint8(0);
} }
int byteUInt16(List<int> dataDetail, int index)=>_byteUInt16(dataDetail, index); int byteUInt16(List<int> dataDetail, int index) =>
_byteUInt16(List<int> dataDetail, int index){ _byteUInt16(dataDetail, index);
if(checkListIndex(dataDetail, index, 2)){ _byteUInt16(List<int> dataDetail, int index) {
if (checkListIndex(dataDetail, index, 2)) {
return 0; return 0;
} }
int value = (dataDetail[index + 1]) << 8 | dataDetail[index]; int value = (dataDetail[index + 1]) << 8 | dataDetail[index];
return _toUInt16(value); return _toUInt16(value);
} }
int _toUInt16(int value){
int _toUInt16(int value) {
var buffer = Uint16List(2).buffer; var buffer = Uint16List(2).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt16(0, value); bData.setInt16(0, value);
return bData.getUint16(0); return bData.getUint16(0);
} }
int byteUInt32(List<int> dataDetail, int index) =>
_byteUInt32(dataDetail, index);
int byteUInt32(List<int> dataDetail, int index)=>_byteUInt32(dataDetail, index); int _byteUInt32(List<int> dataDetail, int index) {
if (checkListIndex(dataDetail, index, 4)) {
int _byteUInt32(List<int> dataDetail, int index){
if(checkListIndex(dataDetail, index, 4)){
return 0; return 0;
} }
int value = ((0xFF & int value = ((0xFF & dataDetail[(index + 3)]) << 24 |
dataDetail[(index + 3)]) << 24 | (0xFF & (0xFF & dataDetail[index + 2]) << 16 |
dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF & (0xFF & dataDetail[index + 1]) << 8 |
dataDetail[index]); 0xFF & dataDetail[index]);
return _toUInt32(value); return _toUInt32(value);
} }
int _toUInt32(int value){ int _toUInt32(int value) {
var buffer = Int32List(2).buffer; var buffer = Int32List(2).buffer;
var bData = ByteData.view(buffer); var bData = ByteData.view(buffer);
bData.setInt32(0, value); bData.setInt32(0, value);
@ -148,84 +171,101 @@ int _toUInt32(int value){
return outputValue; return outputValue;
} }
bool checkListIndex(List<int> dataDetail, int index, int offsetLength){ bool checkListIndex(List<int> dataDetail, int index, int offsetLength) {
if(dataDetail == null){ if (dataDetail == null) {
print('❌解析 dataDetail == null'); print('❌解析 dataDetail == null');
return true; return true;
} }
var len = dataDetail.length; var len = dataDetail.length;
bool result = index + offsetLength > len; bool result = index + offsetLength > len;
if(result){ if (result) {}
}
return result; return result;
} }
int checkSum(List<int> data) { int checkSum(List<int> data) {
int sum = 0; int sum = 0;
for(int v in data){ for (int v in data) {
sum ^= v; sum ^= v;
} }
return sum; return sum;
} }
Future<List<int>> loadAssetsFile(String assetsPath) async{ Future<List<int>> loadAssetsFile(String assetsPath) async {
var byteData = await rootBundle.load(assetsPath); var byteData = await rootBundle.load(assetsPath);
return byteData.buffer.asUint8List().toList(); return byteData.buffer.asUint8List().toList();
} }
//
List<List<T>> splitList<T>(List<T> list, int len) {
if (len <= 1) {
return [list];
}
//TODO: List<List<T>> result = [];
int getPackageCount(List<int> data,{required int averageLen}){ int index = 1;
int len = data.length;
return len%averageLen > 0 ? (len~/averageLen + 1) : len~/averageLen; while (true) {
if (index * len < list.length) {
List<T> temp = list.skip((index - 1) * len).take(len).toList();
result.add(temp);
index++;
continue;
}
List<T> temp = list.skip((index - 1) * len).toList();
result.add(temp);
break;
}
return result;
} }
List<int> getSubData({ //TODO:
required int index, int getPackageCount(List<int> data, {required int averageLen}) {
required int average, int len = data.length;
required List<int> data return len % averageLen > 0 ? (len ~/ averageLen + 1) : len ~/ averageLen;
}){ }
if(data.isEmpty){
List<int> getSubData(
{required int index, required int average, required List<int> data}) {
if (data.isEmpty) {
return []; return [];
} }
int totalLength = data.length; int totalLength = data.length;
if(average >= totalLength){ if (average >= totalLength) {
return data; return data;
} }
if(index*average > totalLength){ if (index * average > totalLength) {
if((index - 1)*average > totalLength){ if ((index - 1) * average > totalLength) {
return []; return [];
}else{ } else {
int tempCount = average*(index - 1); int tempCount = average * (index - 1);
return data.sublist(tempCount,totalLength); return data.sublist(tempCount, totalLength);
} }
}else{ } else {
return data.sublist(average*(index - 1),average*index); return data.sublist(average * (index - 1), average * index);
} }
} }
List<int> reverseList(List<int> srcData){ List<int> reverseList(List<int> srcData) {
print('srcData:$srcData'); //[1,3] print('srcData:$srcData'); //[1,3]
int srcLen = srcData.length; int srcLen = srcData.length;
int halfLen = srcLen ~/2; int halfLen = srcLen ~/ 2;
List<int> dstData = []; List<int> dstData = [];
dstData.addAll(srcData); dstData.addAll(srcData);
for(int i =0; i < halfLen; i++){ for (int i = 0; i < halfLen; i++) {
int begin = i; int begin = i;
int end = srcLen-i-1; int end = srcLen - i - 1;
List<int> beginData = srcData.sublist(begin,begin+1); List<int> beginData = srcData.sublist(begin, begin + 1);
List<int> endData = srcData.sublist(end,end + 1); List<int> endData = srcData.sublist(end, end + 1);
dstData.replaceRange(begin, begin+1, endData); dstData.replaceRange(begin, begin + 1, endData);
dstData.replaceRange(end, end+1, beginData); dstData.replaceRange(end, end + 1, beginData);
} }
print('dstData:$dstData'); print('dstData:$dstData');
return dstData; return dstData;
} }
//TODO:int-> List () WiFi用到的!!!! //TODO:int-> List () WiFi用到的!!!!
List<int> intToByte2ListLow(int value) =>[value >> 8,value]; List<int> intToByte2ListLow(int value) => [value >> 8, value];
int dealWeekDays({ int dealWeekDays({
required int mon, required int mon,
@ -235,37 +275,37 @@ int dealWeekDays({
required int fri, required int fri,
required int sat, required int sat,
required int sun, required int sun,
}){ }) {
return mon + tue * 2 + wed * 4 + thu * 8 + fri * 16 + sat * 32 + sun * 64; return mon + tue * 2 + wed * 4 + thu * 8 + fri * 16 + sat * 32 + sun * 64;
} }
String radixString(List<int> codeUnits){ String radixString(List<int> codeUnits) {
String result = ''; String result = '';
codeUnits.forEach((value){ codeUnits.forEach((value) {
result += value.toRadixString(16).padLeft(2,'0'); result += value.toRadixString(16).padLeft(2, '0');
}); });
return result; return result;
} }
String asciiString(List<int> codeUnits){ String asciiString(List<int> codeUnits) {
String result = ''; String result = '';
codeUnits.forEach((value){ codeUnits.forEach((value) {
result += String.fromCharCode(value); result += String.fromCharCode(value);
}); });
return result; return result;
} }
String utf8String(List<int> codeUnits){ String utf8String(List<int> codeUnits) {
return utf8.decode(codeUnits); return utf8.decode(codeUnits);
} }
bool compareTwoList({List<int>? list1,List<int>? list2}) { bool compareTwoList({List<int>? list1, List<int>? list2}) {
if(list1!.length != list2!.length)return false; if (list1!.length != list2!.length) return false;
int ctn = list1.length; int ctn = list1.length;
for(int i = 0; i < ctn;i++){ for (int i = 0; i < ctn; i++) {
int v1 = list1[i]; int v1 = list1[i];
int v2 = list2[i]; int v2 = list2[i];
if(v1 != v2){ if (v1 != v2) {
print('不包含 $i'); print('不包含 $i');
return false; return false;
} }
@ -273,4 +313,4 @@ bool compareTwoList({List<int>? list1,List<int>? list2}) {
return true; return true;
} }
List<int> encodeStringToInt(String input)=>utf8.encode(input); List<int> encodeStringToInt(String input) => utf8.encode(input);