Dart 将 IEEE-11073 32 位 FLOAT 转换为简单双精度

2023-12-05

I don't have much experience working with these low level bytes and numbers, so I've come here for help. I'm connecting to a bluetooth thermometer in my Flutter app, and I get an array of numbers formatted like this according to their documentation. enter image description here I'm attempting to convert these numbers to a plain temperature double, but can't figure out how. This is the "example" the company gives me. enter image description here However when I get a reading of 98.5 on the thermometer I get a response as an array of [113, 14, 0, 254]

谢谢你的帮助!


IEEE-11073 是医疗设备中常用的格式。您引用的表格包含了您可以解码数字的所有内容,尽管一开始可能很难破译。

让我们以第一个例子为例:0xFF00016C。这是一个 32 位数字,第一个字节是指数,最后三个字节是尾数。两者都以 2 补码表示形式进行编码:

  • 指数,0xFF,在 2 的补码中,这是数字-1
  • 尾数,0x00016C,在 2 的补码中,这是数字364

(如果您不太确定数字如何编码为 2 的补码,请作为单独的问题提出。)

我们要做的下一步是确保它不是表中所示的“特殊”值。因为你的指数不是0 (it is -1),我们知道你没事。因此,不需要特殊处理。

由于该值并不特殊,因此其数值很简单:mantissa * 10^exponent。所以,我们有:364*10^-1 = 36.4,如您的示例所示。

你的第二个例子是类似的。指数是0xFE,这就是数字-22 的补码。尾数是0x000D97,即3479以十进制表示。同样,指数不为 0,因此不需要特殊处理。所以你有了:3479*10^-2 = 34.79.

你说对于98.5值,你得到字节数组[113, 14, 0, 254]。让我们看看我们能否理解这一点。以十六进制编写的字节数组是:[0x71, 0x0E, 0x00, 0xFE]。我猜您以“相反”顺序接收这些字节,因此作为 32 位十六进制,这实际上是0xFE000E71.

我们继续类似的操作:指数又是-2, since 0xFE你就是这样写的-2使用 8 位进行 2 的补码。 (见上文。)尾数是0xE71这等于3697。所以,数字是3697*10^-2 = 36.97.

你声称这实际上是98.5。我最好的猜测是您正在以华氏度阅读它,并且您的设备正在以摄氏度进行报告。如果你计算一下,你会发现36.97C = 98.55F,这已经足够接近了。我不确定你是如何得到的98.5数字,但对于这样的设备,这个结果似乎在你可以预期的精度范围内。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart 将 IEEE-11073 32 位 FLOAT 转换为简单双精度 的相关文章

随机推荐

  • LINQ 计数查询返回 1 而不是 0

    我有以下观点 CREATE VIEW tbl adjudicator result view AS SELECT a adjudicator id sar section adjudicator role id s section id s
  • 如何防止.NET 6中数字的小数部分自动四舍五入

    当我将版本从 NET Core 3 1转换为6 0后 我发现所有decimal 10 5 type 列会自动对数字的小数部分进行四舍五入 并以四舍五入的格式将其保存在数据库中 在 NET Core 的早期版本中它可以正常工作 例如 我有一个
  • 标记不同的图形、字体、大小 MATLAB

    I am trying to basically copy this graph for practice for my final coming up but I don t understand how to change the fo
  • 如何从对话框返回结果?

    我创建了一个对话框 一切都很好 除非我以某种方式返回结果 从对话框中获取用户选择的问题是我们不知道他 她何时会单击ok or cancel 我试图了解标准对话框是如何实现的 以便做类似的事情 我注意到所有打开对话框的功能 例如askdire
  • 按 dtype 选择 Pandas 列

    我想知道 Pandas DataFrames 中是否有一种优雅而快捷的方法来按数据类型 dtype 选择列 即从 DataFrame 中仅选择 int64 列 详细说明一下 类似于 df select columns dtype float
  • 更新 MathJax CDN

    正如官方宣布的那样 MathJax 将关闭其 CDN在 MathJax 网站上 and on StackExchange 的元数据 官方公告推荐了几种替代方案 包括使用替代 CDN 和自托管 对于有大量 MathJax CDN 引用的站点
  • 关于 Unix 命令“wc”,什么被视为一个单词?

    命令wc提供lineCount wordCount and charCount 我正在编写一个程序来模拟 wc 命令 因为它需要一个文件并吐出 3 个属性 行数很容易 因为如果它看到 n它会 lineCount如果一个字符存在并且它不是 E
  • 为在 Android 上实现 GCM 客户端创建 json 项目配置文件时出错

    我正在尝试让 gcm 在我的应用程序中工作 我的工作是将应用程序从 Eclipse 版本更新到 Android studio 版本 在 Android Studio 构建中 仅插入 gcm jar 不再有效 因此 我正在关注这个文档 htt
  • 在 ssrs 2008 中部署报告时如何停止询问凭据

    部署报告时 我收到登录提示 要求输入用户名和密码 我已尝试提供所有可能的 ID 和密码 但没有用 我可以访问报表管理器 url 和报表服务器 url 但如果我开始通过 SQL Server 商业智能开发工作室部署报表 我会收到上述提示 请让
  • 从 Python 调用时 SQL 存储过程未完成

    我试图从 python 脚本调用 MSSQL 数据库中的存储过程 但通过 python 调用时它无法完全运行 此过程将交易数据合并到单个表中的小时 每日块中 稍后由 python 脚本获取 如果我在 SQL studio 中运行该过程 它就
  • Docker 容器上的应用程序之间的 Curl 连接被拒绝

    我有一个网站 ZF1 和一个 API Laravel 在同一个 Docker Laradock 容器上运行 我可以通过浏览器单独访问每个内容 但是当我从网站向应用程序发出 cURL 请求时 我得到一个 null 响应 并且标头返回 0 如果
  • 如何解析服务器上 .html 文件中的 PHP 语法?

    这感觉像是一个非常n00b的问题 但这里是 我有一系列 HTML 文件 每个文件中都包含少量 HTML 内容 从实时系统导出 更改文件扩展名是不可行的 因为当我移交项目时 我不会是执行此 导出 刻录到 CD 过程的人 这是一个示例页面 它非
  • 使用 Selenium 进行边缘上传文件控制

    我正在尝试在 Edge 浏览器上使用 Selenium Webdriver 上传文件 是的 我已经下载了 EdgeDriver 并安装了用于测试 Edge 的 MSI 从 Edge 浏览器中单击屏幕上的元素效果很好 问题出在上传文件控制上
  • 如何更改 Google Analytics 中的数据

    我有一个大问题 找不到解决方案 在处理一个项目时 我发现一些用户凭据作为 URL 中的 GET 参数 一些外部程序员很马虎 这应该被删除 显然 但我无法找到更改 删除 旧数据的方法 如果有一个解决方案可以从包含 符号的字符串中删除所有 GE
  • jQuery:在 jqGrid 中是否可以重新排序工具栏按钮

    在 jqGrid 中 是否可以对页脚工具栏中的默认按钮重新排序 我试图让 搜索 按钮显示在 删除 按钮之前 我已阅读文档 但找不到任何提及 但认为可能有一个简单的技巧 没有标准选项允许对按钮中的按钮进行重新排序航海家工具栏 另一方面 jqG
  • 从 Windows 8.1 专业版升级到 Windows 10 后,我无法创建通用 10 项目

    Problem 我已经升级了我的windows 8 1 pro 64 bits to windows 10 64 bits开发通用应用程序windows 10 但我注意到 当我使用以下命令创建新的 universal 10 项目时 有很多错
  • 帮助计算分层数据集中的复数总和

    我有一个有趣的 SQL 问题 我有一个用于制作物料清单的零件分层表 与此类似 ASSEMBLY parent part id part id quantity 我通过如下查询获取此结构的层次结构 SELECT level part id q
  • 组合unicode字符串

    我正在尝试创建一个像这样的字符串const str u33d rotation Where u33是 3 的代码 这只是一个简单的测试用例 然而这给了我 SyntaxError 格式错误的 Unicode 字符转义序列 有没有办法将 uni
  • 如何更改 ListView 项目的字体? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个问题 我想为我的列表视图创建自定义设计 但我不知道该怎么做 我使用列表视图中的 sql 数据库 哈哈 对不起 我不知道该怎么说 因为我是德国人 所以顺便说一句 对不起我的英语
  • Dart 将 IEEE-11073 32 位 FLOAT 转换为简单双精度

    I don t have much experience working with these low level bytes and numbers so I ve come here for help I m connecting to