如何用Flutter(flutter_blue)将OCS蓝牙吊钩秤的List数据转公斤值?
解决OCS 500kg蓝牙吊钩秤称重数据转换问题
数据解析逻辑
先拆解你提供的示例数据[2,66,32,32,32,32,48,46,57,217,13],每个整数对应ASCII字符:
2:起始标记(STX)66:设备状态标识(比如代表稳定称重的字符'B')- 四个
32:空格填充符 48='0'、46='.'、57='9':有效称重数值字符串"0.9"217:校验位(不影响数值提取,可忽略)13:结束标记(CR回车符)
核心逻辑是提取字符串中的数字和小数点部分,转换为公斤数值。
代码实现
在flutter_blue监听特征值变化的回调中,加入以下处理逻辑:
// 监听特征值的数据流 characteristic.value.listen((List<int> data) { // 1. 将List<int>转为字符串,过滤掉非数字和小数点的字符 String rawWeightStr = String.fromCharCodes(data) .replaceAll(RegExp(r'[^0-9.]'), ''); // 2. 转换为double类型的公斤值 if (rawWeightStr.isNotEmpty) { double weightInKg = double.parse(rawWeightStr); print("当前称重:$weightInKg kg"); // 此处可将weightInKg用于UI展示或业务逻辑处理 } });
特殊情况处理
- 如果设备输出异常(比如多个小数点),可以提前校验:
if (rawWeightStr.split('.').length > 2) { // 异常数据,跳过处理或提示错误 return; } - 若数值存在前导/尾随空格,上面的正则会自动过滤,不影响转换结果。
验证示例
用你的测试数据[2,66,32,32,32,32,48,46,57,217,13]执行代码后,会得到0.9 kg的称重结果,符合预期。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

