web_synchronization_tool/lib/windows/little_extension.dart

98 lines
2.1 KiB
Dart
Raw Normal View History

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;
}
}