Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
07d3cddf40
@ -38,38 +38,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<int> dataDetail, int index)=>_toInt8(dataDetail[index]);
|
||||
int _toInt8(int value){
|
||||
int byteInt8(List<int> 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<int> dataDetail, int index)=>_byteInt16(dataDetail, index);
|
||||
int _byteInt16(List<int> dataDetail, int index){
|
||||
if(checkListIndex(dataDetail, index, 2)){
|
||||
int byteInt16(List<int> dataDetail, int index) => _byteInt16(dataDetail, index);
|
||||
int _byteInt16(List<int> 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);
|
||||
@ -77,18 +96,19 @@ int _toInt16(int value){
|
||||
return outputValue;
|
||||
}
|
||||
|
||||
int byteInt32(List<int> dataDetail, int index)=>_byteInt32(dataDetail, index);
|
||||
int _byteInt32(List<int> dataDetail, int index){
|
||||
if(checkListIndex(dataDetail, index, 4)){
|
||||
int byteInt32(List<int> dataDetail, int index) => _byteInt32(dataDetail, index);
|
||||
int _byteInt32(List<int> 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);
|
||||
@ -96,51 +116,54 @@ int _toInt32(int value){
|
||||
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->4个字节List 低字节在前,高字节在后(大端存储) 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 _toUInt8(int value){
|
||||
int byteUInt8(List<int> 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<int> dataDetail, int index)=>_byteUInt16(dataDetail, index);
|
||||
_byteUInt16(List<int> dataDetail, int index){
|
||||
if(checkListIndex(dataDetail, index, 2)){
|
||||
int byteUInt16(List<int> dataDetail, int index) =>
|
||||
_byteUInt16(dataDetail, index);
|
||||
_byteUInt16(List<int> 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<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;
|
||||
}
|
||||
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);
|
||||
@ -148,84 +171,101 @@ int _toUInt32(int value){
|
||||
return outputValue;
|
||||
}
|
||||
|
||||
bool checkListIndex(List<int> dataDetail, int index, int offsetLength){
|
||||
if(dataDetail == null){
|
||||
bool checkListIndex(List<int> 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<int> data) {
|
||||
int checkSum(List<int> data) {
|
||||
int sum = 0;
|
||||
for(int v in data){
|
||||
for (int v in data) {
|
||||
sum ^= v;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
Future<List<int>> loadAssetsFile(String assetsPath) async{
|
||||
var byteData = await rootBundle.load(assetsPath);
|
||||
Future<List<int>> loadAssetsFile(String assetsPath) async {
|
||||
var byteData = await rootBundle.load(assetsPath);
|
||||
return byteData.buffer.asUint8List().toList();
|
||||
}
|
||||
|
||||
//获取截取后的数组
|
||||
List<List<T>> splitList<T>(List<T> list, int len) {
|
||||
if (len <= 1) {
|
||||
return [list];
|
||||
}
|
||||
|
||||
//TODO:获取数据包分包后包的数量
|
||||
int getPackageCount(List<int> data,{required int averageLen}){
|
||||
int len = data.length;
|
||||
return len%averageLen > 0 ? (len~/averageLen + 1) : len~/averageLen;
|
||||
List<List<T>> result = [];
|
||||
int index = 1;
|
||||
|
||||
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({
|
||||
required int index,
|
||||
required int average,
|
||||
required List<int> data
|
||||
}){
|
||||
if(data.isEmpty){
|
||||
//TODO:获取数据包分包后包的数量
|
||||
int getPackageCount(List<int> data, {required int averageLen}) {
|
||||
int len = data.length;
|
||||
return len % averageLen > 0 ? (len ~/ averageLen + 1) : len ~/ averageLen;
|
||||
}
|
||||
|
||||
List<int> getSubData(
|
||||
{required int index, required int average, required List<int> 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<int> reverseList(List<int> srcData){
|
||||
List<int> reverseList(List<int> srcData) {
|
||||
print('srcData:$srcData'); //[1,3]
|
||||
int srcLen = srcData.length;
|
||||
int halfLen = srcLen ~/2;
|
||||
int halfLen = srcLen ~/ 2;
|
||||
List<int> 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<int> beginData = srcData.sublist(begin,begin+1);
|
||||
List<int> endData = srcData.sublist(end,end + 1);
|
||||
dstData.replaceRange(begin, begin+1, endData);
|
||||
dstData.replaceRange(end, end+1, beginData);
|
||||
int end = srcLen - i - 1;
|
||||
List<int> beginData = srcData.sublist(begin, begin + 1);
|
||||
List<int> 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<int> intToByte2ListLow(int value) =>[value >> 8,value];
|
||||
|
||||
List<int> intToByte2ListLow(int value) => [value >> 8, value];
|
||||
|
||||
int dealWeekDays({
|
||||
required int mon,
|
||||
@ -235,37 +275,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<int> codeUnits){
|
||||
String radixString(List<int> 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<int> codeUnits){
|
||||
String asciiString(List<int> codeUnits) {
|
||||
String result = '';
|
||||
codeUnits.forEach((value){
|
||||
codeUnits.forEach((value) {
|
||||
result += String.fromCharCode(value);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
String utf8String(List<int> codeUnits){
|
||||
String utf8String(List<int> codeUnits) {
|
||||
return utf8.decode(codeUnits);
|
||||
}
|
||||
|
||||
bool compareTwoList({List<int>? list1,List<int>? list2}) {
|
||||
if(list1!.length != list2!.length)return false;
|
||||
bool compareTwoList({List<int>? list1, List<int>? 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;
|
||||
}
|
||||
@ -273,4 +313,4 @@ bool compareTwoList({List<int>? list1,List<int>? list2}) {
|
||||
return true;
|
||||
}
|
||||
|
||||
List<int> encodeStringToInt(String input)=>utf8.encode(input);
|
||||
List<int> encodeStringToInt(String input) => utf8.encode(input);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user