美文网首页
【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