【问题标题】:Is there a Dart function to convert List<int> to Double?是否有将 List<int> 转换为 Double 的 Dart 函数?
【发布时间】:2019-07-31 06:16:06
【问题描述】:

我从带有flutter blue 列表的蓝牙控制器获取蓝牙特性。此特性包含蓝牙秤的重量测量。是否有将此整数列表转换为 Double 的函数?

我试图通过阅读 IEEE 754 标准来了解浮点表示的一些背景知识。有 dart 库 typed_data 但我是 dart 新手,对这个库没有经验。

例子:

我有这个列表:[191,100,29,173],它来自蓝牙控制器,作为浮点值的 IEEE754 表示。 现在我相信我必须将每个 int 转换为十六进制并连接这些值:bf 64 1d ad

接下来要做的就是将其转换为双精度,但我找不到将十六进制转换为双精度的函数。只有int.parse("0xbf641dad")

【问题讨论】:

  • 你能举个例子说明你有什么和你想要什么。我不完全确定“是否有将这个整数列表转换为浮点数的函数”。我正在阅读此内容,因为您想将列表转换为单个浮点值。但我需要一个例子来确定。
  • 这基本上回答了我的问题:stackoverflow.com/questions/55355482/…

标签: dart bluetooth ieee-754


【解决方案1】:

我猜你的意思是将整数列表转换为浮点数的 list,而不是单个浮点数,对吧? 首先,dart 没有名为float 的类型。相反,它的类型为double。要转换它,您可以使用map() 函数:

var listInt = [1, 2, 3];
var listDouble = list.map((i) => i.toDouble()).toList();

【讨论】:

    【解决方案2】:

    遇到了同样的问题。

    我认为您的意思是如何将四个字节变成 float32 ? 我需要做同样的事情。

    你会想做这样的事情:

    先把List值作为字节缓冲区,再取字节数据,就可以使用getFloat32函数了。

    ByteBuffer buffer = new Int8List.fromList(value_in).buffer;
    ByteData byteData = new ByteData.view(buffer);
    result = byteData.getFloat32(0);
    

    请注意,蓝牙的字节顺序可能是从后到前的,因为约定会有所不同。

    您还需要 typed_data 库:

    import 'dart:typed_data'; //for data formatting
    

    我现在正试图朝另一个方向发展。 . .原因很明显。

    【讨论】:

      【解决方案3】:

      你可能需要这个:

      double parseHexString(String hexStr,  bool littleEndian){
        if(hexStr.length % 2 != 0){
          return 0;
        }
        if(littleEndian == true){
          List<int> bytes = hex.decode(hexStr).reversed.toList();
          hexStr = hex.encode(bytes);
        }
        var byteConvert = ByteData(12);
        byteConvert.setInt64(0, int.parse(hexStr,radix: 16));
        return byteConvert.getFloat64(0);}
      

      还有演示:

      double lat = parseHexString("0000004069665E40",true);
      //lat = 121.60017395019531
      

      【讨论】:

        【解决方案4】:

        如果您已经拥有:

        int.parse("0xbf641dad")
        

        我不明白为什么这不起作用:

        int.parse("0xbf641dad").toDouble();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-14
          • 1970-01-01
          • 1970-01-01
          • 2016-07-24
          相关资源
          最近更新 更多