| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'dart:convert'; | 
					
						
							|  |  |  | import 'dart:typed_data'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /// 添加小端序头
 | 
					
						
							|  |  |  | extension MapLittle on Map { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /// 在转成 Uint8List 的数据前面添加 小端序
 | 
					
						
							|  |  |  |   Uint8List toLittle({dynamic value = 0, int length = 4}){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// map 转 json
 | 
					
						
							|  |  |  |     String mapJson = jsonEncode(this); | 
					
						
							|  |  |  |     /// json 转 Uint8List
 | 
					
						
							|  |  |  |     final mapData = utf8.encode(mapJson); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// 添加小端序
 | 
					
						
							|  |  |  |     final data = mapData.toLittle(value: value,length: length); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-06 15:38:28 +08:00
										 |  |  | extension ListIntLittle on List<int> { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   List<int> toLittle({int? value, int length = 4}){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     List<int> ret = []; | 
					
						
							|  |  |  |     /// 初始化 定义数据长度
 | 
					
						
							|  |  |  |     final little = ByteData(4); | 
					
						
							|  |  |  |     /// 设置小端序数据
 | 
					
						
							|  |  |  |     little.setInt32(0, value ?? this.length, Endian.little); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (int i = 0; i < little.lengthInBytes; i++) { | 
					
						
							|  |  |  |       ret.add(little.getUint8(i)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ret.addAll(this); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ret; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 14:36:36 +08:00
										 |  |  | extension Uint8ListLittle on Uint8List { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /// 在转成 Uint8List 的数据前面添加 小端序
 | 
					
						
							|  |  |  |   Uint8List toLittle({dynamic value = 0, int length = 4}){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var mapData = this; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// 初始化 定义数据长度
 | 
					
						
							|  |  |  |     final little = ByteData(length); | 
					
						
							|  |  |  |     /// 设置小端序数据
 | 
					
						
							|  |  |  |     little.setInt32(0, value,Endian.little); | 
					
						
							|  |  |  |     /// 小端序 转 Uint8List
 | 
					
						
							|  |  |  |     var littleData = little.buffer.asUint8List(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// 初始化 Uint8List
 | 
					
						
							|  |  |  |     Uint8List data = Uint8List(littleData.length + mapData.length ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// 组装 map Uint8List 和 小端序 Uint8List
 | 
					
						
							|  |  |  |     data.setRange(0, littleData.length, littleData); | 
					
						
							|  |  |  |     data.setRange(littleData.length, mapData.length + littleData.length, mapData); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /// 返回组合数据
 | 
					
						
							|  |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Uint8List转int 从前4位转小端序
 | 
					
						
							|  |  |  |   int? fromLittle({int start = 0,int length  = 4}) { | 
					
						
							|  |  |  |     if (this.length < length){ | 
					
						
							|  |  |  |       print('转小端序的数据长度不足'); | 
					
						
							|  |  |  |       return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     final littleData = sublist(start,start + length); | 
					
						
							|  |  |  |     // 创建ByteData
 | 
					
						
							|  |  |  |     ByteData byteData = littleData.buffer.asByteData(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 读取小端序的32位整数
 | 
					
						
							|  |  |  |     int little = byteData.getInt32(0, Endian.little); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return little; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |