Flutter list<int> int 类型转文字

我们在使用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;

       }
    }

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值