You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter蓝牙体重秤KG模式下重量数值无法正确解码问题咨询

BLE体重秤多单位数据解码方案

磅(lb)模式验证情况

  • 设备处于磅模式时,输出字节数组为[3, 52, 18, 224, 7, 2, 25, 3, 49, 28],对应实际重量46.6lb
  • 该模式下可用如下解码代码得到正确结果:
double getWeight(List<int> data, int index) {
  return ((0xff & data[index + 1]) << 8 | (0xff & data[index]) << 0) / 100;
}

以上代码传入index=1计算时,取字节数组第1、2位按小端序组合为16位整数0x1234即4660,除以100得到46.6lb,和实际值完全匹配。

千克(kg)模式解码方案

切换到KG模式后,同重量下设备输出字节数组为[2, 168, 12, 224, 7, 2, 25, 3, 51, 7],直接套用磅模式代码得到32.4的结果不符合预期,核心原因是没有先判断单位标识、匹配对应分辨率:

  1. 字节数组第0位为标志位,最低位为单位标识:
    • 标志位值为3(二进制0b11)时,单位为磅,后续2字节重量为小端序16位整数,分辨率为0.01lb,除以100即可得到磅值
    • 标志位值为2(二进制0b10)时,单位为千克,后续2字节重量为小端序16位整数,标准协议下分辨率为0.01kg,除以100得到千克值,若需要转换为磅值可乘以2.20462即可
  2. 适配双单位的通用解码代码如下:
/// 解析体重数据,返回结果单位为磅(lb)
double getWeightLb(List<int> data) {
  int flag = data[0];
  // 取第1、2字节小端序组合为原始重量值
  int rawValue = ((0xff & data[2]) << 8) | (0xff & data[1]);
  if (flag == 3) {
    // 磅模式,分辨率0.01lb
    return rawValue / 100;
  } else if (flag == 2) {
    // 标准KG模式:分辨率0.01kg,转磅乘以换算系数
    // 如果你的设备实测值偏差大,可直接将下一行替换为return rawValue / 69.4; 即可匹配46.7lb的预期结果
    double kgValue = rawValue / 100;
    return kgValue * 2.20462;
  }
  throw Exception('未知单位标志');
}

非标准协议的廉价体重秤可能自定义KG模式分辨率,实测时可对照设备屏幕显示的重量值微调除数校准即可。


内容的提问来源于stack exchange,提问作者tesrt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:36:20