74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
|  | 
 | ||
|  | 
 | ||
|  | 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; | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 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; | ||
|  |   } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |