美文网首页
【Dart/Flutter】一些常用的基本数据格式转换

【Dart/Flutter】一些常用的基本数据格式转换

作者: 坐了整个春夏秋冬 | 来源:发表于2022-01-07 10:41 被阅读0次

    十六进制

    • 十六进制转十进制
    String hexStr = "5208";//16进制一定要去除前缀"0x"
    int.parse(hexStr, radix: 16);
    
    • 十六进制转BigInt
    String hexStr = "5208";//16进制一定要去除前缀"0x"
    BigInt.parse(hexStr, radix: 16);
    
    • 十六进制转字符串
      static String hexToString(String hex0x) {
        String hex = HexUtils.remove0X(hex0x);
        String result = "";
        for (var i = 0; i < hex.length; i += 2) {
          String codeStr = hex.substring(i, i + 2);
          int codeInt = int.parse(codeStr, radix: 16);
          result += String.fromCharCode(codeInt);
        }
        return result;
      }
    

    有时,从16进制转换为字符串后,因为16进制数据源的原因,前后可能会有空格以及一些奇怪的字符
    此时需要去掉,可以通过以下这个方法(参考源:JDK中String的trim方法实现)

      static String trim(String content) {
        int len = content.length;
        int st = 0;
        while ((st < len) && (content.codeUnitAt(st) <= ' '.codeUnits[0])) {
          st++;
        }
        while ((st < len) && (content.codeUnitAt(len - 1) <= ' '.codeUnits[0])) {
          len--;
        }
        return ((st > 0) || (len < content.length)) ? content.substring(st, len) : content;
      }
    

    十进制

    • 十进制转十六进制
    int i = 5;
    i.toRadixString(16);
    

    乘方/次方/次幂

    //10的2次方
    pow(10, 2)
    

    UInt8List转十六进制,具体细则看注释

    static String uint8ToHex(Uint8List byteArr) {
        if (byteArr == null || byteArr.length == 0) {
          return "";
        }
        Uint8List result = Uint8List(byteArr.length << 1);//创建一个byteArr.length两倍大的数组以存储16进制字符
        var hexTable = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; //16进制字符表
        //下面的for循环是通过codeUnitAt()方法取byteArr每一位对应的字符串的“UTF-16代码单元”,如果去掉.codeUnitAt()其实也就直接是16进制字符串
        for (var i = 0; i < byteArr.length; i++) {
          var bit = byteArr[i]; //取传入的byteArr的每一位
          var index = bit >> 4 & 15; //右移4位,取剩下四位,&15相当于&F,也就是&1111
          var i2 = i << 1; //byteArr的每一位对应结果的两位,所以对于结果的操作位数要乘2
          result[i2] = hexTable[index].codeUnitAt(0); //左边的值取字符表,转为Unicode放进resut数组
          index = bit & 15; //取右边四位,相当于01011010&00001111=1010
          result[i2 + 1] = hexTable[index].codeUnitAt(0); //右边的值取字符表,转为Unicode放进resut数组
        }
        //这里为了优化转换成一整个String的效率,所以就在上面的循环中先转成codeUnit再通过String的实例方法来生成字符串,否则需要用result.join(""),这个join()方法的效率低于String.fromCharCodes()方法
        return String.fromCharCodes(result); //Unicode转回为对应字符,生成字符串返回
      }
    

    相关文章

      网友评论

          本文标题:【Dart/Flutter】一些常用的基本数据格式转换

          本文链接:https://www.haomeiwen.com/subject/buhjcrtx.html