我们在使用Socket进行请求的时候 接收到的返回值一般也是list<int>类型 有时候需要转换成字符串 所以自己写了一个工具类
下面我贴出方法 供大家参考
1将List<int>转换为int值
//将数组转换成int值 一般接收的时候需要
// ignore: missing_return
int listToValue(List<int> data){
//data [a0,a1]
switch(data.length){
case 2:
return (data[1]<<8)+data[0];
break;
case 4:
return data[0]+(data[1]<<8)+(data[2]<<16)+(data[3]<<24);
break;
case 8:
return data[0]+(data[1]<<8)+(data[2]<<16)+(data[3]<<24)+
(data[4]<<32)+(data[5]<<40)+(data[6]<<48)+(data[7]<<56);
break;
case 16:
return data[0]+(data[1]<<8)+(data[2]<<16)+(data[3]<<24)+
(data[4]<<32)+(data[5]<<40)+(data[6]<<48)+(data[7]<<56)+
(data[8]<<64)+(data[9]<<72)+(data[10]<<80)+(data[11]<<88)+
(data[12]<<96)+(data[13]<<104)+(data[14]<<112)+(data[15]<<116);
break;
}
}
2.因为每个公司的业务不同 所以 大家按照自己公司的业务来截取对应位置的数据
//将unicode或ascii编码类型的list(编码格式 长度 字符串内容)转换为String字符串
String unicodeOrAsciiList2String(List<int> data){
//获取字符串长度对应的数据
List<int> lengthList= data.sublist(1,3);
//获取字符串长度的int值
int length=listToValue(lengthList);
if(length==0){ //长度为0
return '';
}else{ //长度不为0
List<int> strList= data.sublist(3,data.length);
String result='';
if(data[0]==1){ //ASCII编码
strList.forEach((value){
result+=String.fromCharCode(value);
});
return result;
}else if(data[0]==2){ //UNICODE编码
for(int i=0;i<strList.length~/2;i++){
List<int> current= strList.sublist(i*2,(i+1)*2);
result+=String.fromCharCode(listToValue(current));
}
return result;
}
}
}
//字符串转ascii编码数组
List<int> str2AsciiList(String text){
List<int> temp=text.codeUnits;
List<int> result=[];
List<int> lengthList= HexadecimalConversionUtils().valueToList(temp.length, 2);
result..add(1)..addAll(lengthList)..addAll(temp); //编码格式 长度 内容
return result;
}
//将字符串转换为unicode格式的 编码格式 长度 字符串内容 形式的list集合
List<int> str2unicodeList(String text){
List<int> temp=text.codeUnits;
List<int> textList=List();
List<int> result=[2]; //unicode编码
for(int i=0;i<temp.length;i++){
List<int> charList= valueToList(temp[i],2);
charList.reversed;
textList.addAll(charList);
}
List<int> textLengthList=valueToList(textList.length, 2);
result..addAll(textLengthList)..addAll(textList);
return result;
}
HexadecimalConversionUtils:
//将一个Int值转化为数组 一般发送时候需要
// ignore: missing_return
List<int> valueToList(int value,int length){
switch(length){
case 2:
int a0=value&0xff;
int a1=(value>>8)&0xff;
return [a0,a1];
break;
case 4:
int a0=value&0xff;
int a1=(value>>8)&0xff;
int a2=(value>>16)&0xff;
int a3=(value>>24)&0xff;
return [a0,a1,a2,a3];
break;
case 8:
int a0=value&0xff;
int a1=(value>>8)&0xff;
int a2=(value>>16)&0xff;
int a3=(value>>24)&0xff;
int a4=(value>>32)&0xff;
int a5=(value>>40)&0xff;
int a6=(value>>48)&0xff;
int a7=(value>>56)&0xff;
return [a0,a1,a2,a3,a4,a5,a6,a7];
break;
}
}