是否有将 List<int> 转换为 Double 的 Dart 函数?
Posted
技术标签:
【中文标题】是否有将 List<int> 转换为 Double 的 Dart 函数?【英文标题】:Is there a Dart function to convert List<int> to Double? 【发布时间】: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")
。
【问题讨论】:
你能举个例子说明你有什么和你想要什么。我不完全确定“是否有将这个整数列表转换为浮点数的函数”。我正在阅读此内容,因为您想将列表转换为单个浮点值。但我需要一个例子来确定。 这基本上回答了我的问题:***.com/questions/55355482/… 【参考方案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();
【讨论】:
以上是关于是否有将 List<int> 转换为 Double 的 Dart 函数?的主要内容,如果未能解决你的问题,请参考以下文章
javaAPI 中是不是有将 Dataset<Row> 转换为 map() 并返回 Dataset<Row>?
在 C# 中将 List<List<T>> 转换为 List<T>
是否有将 tensorflow NN 转换为 Jax 的模块?
将 List<int> 转换为 List<int?> 的最快方法