截取20个字节的数字分割方法
This commit is contained in:
parent
9d2b5d9be3
commit
142893cd47
@ -17,14 +17,32 @@ String uint8ToHex(Uint8List byteArr) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
Uint8List result = Uint8List(byteArr.length << 1);
|
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++) {
|
for (var i = 0; i < byteArr.length; i++) {
|
||||||
var bit = byteArr[i]; //取传入的byteArr的每一位
|
var bit = byteArr[i]; //取传入的byteArr的每一位
|
||||||
var index = bit >> 4 & 15; //右移4位,取剩下四位
|
var index = bit >> 4 & 15; //右移4位,取剩下四位
|
||||||
var i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2
|
var i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2
|
||||||
result[i2] = hexTable[index].codeUnitAt(0); //左边的值取字符表,转为Unicode放进resut数组
|
result[i2] = hexTable[index].codeUnitAt(0); //左边的值取字符表,转为Unicode放进resut数组
|
||||||
index = bit & 15; //取右边四位
|
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转回为对应字符,生成字符串返回
|
return String.fromCharCodes(result); //Unicode转回为对应字符,生成字符串返回
|
||||||
}
|
}
|
||||||
@ -48,6 +66,7 @@ int _byteInt16(List<int> dataDetail, int index){
|
|||||||
int value = (dataDetail[index + 1] & 0xff) << 8 | (dataDetail[index] & 0xff);
|
int value = (dataDetail[index + 1] & 0xff) << 8 | (dataDetail[index] & 0xff);
|
||||||
return _toInt16(value);
|
return _toInt16(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
int _toInt16(int value) {
|
int _toInt16(int value) {
|
||||||
var buffer = Int16List(1).buffer;
|
var buffer = Int16List(1).buffer;
|
||||||
var bData = ByteData.view(buffer);
|
var bData = ByteData.view(buffer);
|
||||||
@ -61,12 +80,13 @@ int _byteInt32(List<int> dataDetail, int index){
|
|||||||
if (checkListIndex(dataDetail, index, 4)) {
|
if (checkListIndex(dataDetail, index, 4)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int value = ((0xFF &
|
int value = ((0xFF & dataDetail[(index + 3)]) << 24 |
|
||||||
dataDetail[(index + 3)]) << 24 | (0xFF &
|
(0xFF & dataDetail[index + 2]) << 16 |
|
||||||
dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF &
|
(0xFF & dataDetail[index + 1]) << 8 |
|
||||||
dataDetail[index]);
|
0xFF & dataDetail[index]);
|
||||||
return _toInt32(value);
|
return _toInt32(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
int _toInt32(int value) {
|
int _toInt32(int value) {
|
||||||
var buffer = Int32List(2).buffer;
|
var buffer = Int32List(2).buffer;
|
||||||
var bData = ByteData.view(buffer);
|
var bData = ByteData.view(buffer);
|
||||||
@ -80,7 +100,8 @@ 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
|
//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 byteUInt8(List<int> dataDetail, int index) => _toUInt8(dataDetail[index]);
|
||||||
int _toUInt8(int value) {
|
int _toUInt8(int value) {
|
||||||
@ -90,7 +111,8 @@ int _toUInt8(int value){
|
|||||||
return bData.getUint8(0);
|
return bData.getUint8(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int byteUInt16(List<int> dataDetail, int index)=>_byteUInt16(dataDetail, index);
|
int byteUInt16(List<int> dataDetail, int index) =>
|
||||||
|
_byteUInt16(dataDetail, index);
|
||||||
_byteUInt16(List<int> dataDetail, int index) {
|
_byteUInt16(List<int> dataDetail, int index) {
|
||||||
if (checkListIndex(dataDetail, index, 2)) {
|
if (checkListIndex(dataDetail, index, 2)) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -98,6 +120,7 @@ _byteUInt16(List<int> dataDetail, int index){
|
|||||||
int value = (dataDetail[index + 1]) << 8 | dataDetail[index];
|
int value = (dataDetail[index + 1]) << 8 | dataDetail[index];
|
||||||
return _toUInt16(value);
|
return _toUInt16(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
int _toUInt16(int value) {
|
int _toUInt16(int value) {
|
||||||
var buffer = Uint16List(2).buffer;
|
var buffer = Uint16List(2).buffer;
|
||||||
var bData = ByteData.view(buffer);
|
var bData = ByteData.view(buffer);
|
||||||
@ -105,17 +128,17 @@ int _toUInt16(int value){
|
|||||||
return bData.getUint16(0);
|
return bData.getUint16(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int byteUInt32(List<int> dataDetail, int index) =>
|
||||||
int byteUInt32(List<int> dataDetail, int index)=>_byteUInt32(dataDetail, index);
|
_byteUInt32(dataDetail, index);
|
||||||
|
|
||||||
int _byteUInt32(List<int> dataDetail, int index) {
|
int _byteUInt32(List<int> dataDetail, int index) {
|
||||||
if (checkListIndex(dataDetail, index, 4)) {
|
if (checkListIndex(dataDetail, index, 4)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int value = ((0xFF &
|
int value = ((0xFF & dataDetail[(index + 3)]) << 24 |
|
||||||
dataDetail[(index + 3)]) << 24 | (0xFF &
|
(0xFF & dataDetail[index + 2]) << 16 |
|
||||||
dataDetail[index + 2]) << 16 | (0xFF & dataDetail[index + 1]) << 8 | 0xFF &
|
(0xFF & dataDetail[index + 1]) << 8 |
|
||||||
dataDetail[index]);
|
0xFF & dataDetail[index]);
|
||||||
return _toUInt32(value);
|
return _toUInt32(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,8 +157,7 @@ bool checkListIndex(List<int> dataDetail, int index, int offsetLength){
|
|||||||
}
|
}
|
||||||
var len = dataDetail.length;
|
var len = dataDetail.length;
|
||||||
bool result = index + offsetLength > len;
|
bool result = index + offsetLength > len;
|
||||||
if(result){
|
if (result) {}
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,6 +174,28 @@ Future<List<int>> loadAssetsFile(String assetsPath) async{
|
|||||||
return byteData.buffer.asUint8List().toList();
|
return byteData.buffer.asUint8List().toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取截取后的数组
|
||||||
|
List<List<T>> splitList<T>(List<T> list, int len) {
|
||||||
|
if (len <= 1) {
|
||||||
|
return [list];
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO:获取数据包分包后包的数量
|
//TODO:获取数据包分包后包的数量
|
||||||
int getPackageCount(List<int> data, {required int averageLen}) {
|
int getPackageCount(List<int> data, {required int averageLen}) {
|
||||||
@ -159,11 +203,8 @@ int getPackageCount(List<int> data,{required int averageLen}){
|
|||||||
return len % averageLen > 0 ? (len ~/ averageLen + 1) : len ~/ averageLen;
|
return len % averageLen > 0 ? (len ~/ averageLen + 1) : len ~/ averageLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<int> getSubData({
|
List<int> getSubData(
|
||||||
required int index,
|
{required int index, required int average, required List<int> data}) {
|
||||||
required int average,
|
|
||||||
required List<int> data
|
|
||||||
}){
|
|
||||||
if (data.isEmpty) {
|
if (data.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@ -205,7 +246,6 @@ List<int> reverseList(List<int> srcData){
|
|||||||
//TODO:int->两个字节 List 高字节在前,低字节在后(小端存储) 本工程只有配置 WiFi用到的!!!!
|
//TODO:int->两个字节 List 高字节在前,低字节在后(小端存储) 本工程只有配置 WiFi用到的!!!!
|
||||||
List<int> intToByte2ListLow(int value) => [value >> 8, value];
|
List<int> intToByte2ListLow(int value) => [value >> 8, value];
|
||||||
|
|
||||||
|
|
||||||
int dealWeekDays({
|
int dealWeekDays({
|
||||||
required int mon,
|
required int mon,
|
||||||
required int tue,
|
required int tue,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user