98 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.1 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 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;
 | |
|   }
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 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;
 | |
|   }
 | |
| 
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 |