如何在Dart中将蓝牙UUID字符串转换为List<int>类型?
字符串UUID转flutter_reactive_ble的Uuid对象方法
flutter_reactive_ble的Uuid类需要传入List<int>类型的字节列表,字符串UUID得先转成对应的十六进制字节数组,下面分两种常见场景给出转换方法:
1. 16位短UUID(如"FFF0")
短UUID多对应蓝牙标准服务,转换时直接把字符串按两位一组转成十六进制整数:
List<int> shortUuidToBytes(String uuid) { assert(uuid.length == 4, "短UUID必须是4位十六进制字符串"); return [ int.parse(uuid.substring(0, 2), radix: 16), int.parse(uuid.substring(2, 4), radix: 16), ]; }
使用示例:
// 转换短UUID"0000" var serviceUuid = Uuid(shortUuidToBytes("0000"));
2. 128位完整UUID(如"0000FFF0-0000-1000-8000-00805F9B34FB")
先去掉UUID里的连字符,再按两位一组转成十六进制整数:
List<int> fullUuidToBytes(String uuid) { String cleanedUuid = uuid.replaceAll('-', ''); assert(cleanedUuid.length == 32, "完整UUID去掉连字符后必须是32位"); List<int> bytes = []; for (int i = 0; i < cleanedUuid.length; i += 2) { String hexPair = cleanedUuid.substring(i, i + 2); bytes.add(int.parse(hexPair, radix: 16)); } return bytes; }
使用示例:
var fullUuidStr = "0000FFF0-0000-1000-8000-00805F9B34FB"; var serviceUuid = Uuid(fullUuidToBytes(fullUuidStr));
替换到你的扫描代码中
把上述工具函数用到你原有的扫描逻辑里:
// 替换成你的目标UUID字符串 var targetUuidStr = "0000"; // 根据UUID类型选择对应的转换函数 var targetUuid = Uuid(shortUuidToBytes(targetUuidStr)); ble.scanForDevices( withServices: [targetUuid], scanMode: ScanMode.lowLatency ).listen((device) { // 处理扫描结果 if (!deviceListTechnical.contains(device.id)) { deviceListTechnical.add(device.id); print(device); try { BuildList(device); } catch(e) { print(e); } } }, onError: (error) { // 处理错误 print(error); });
注意:转换前要确保UUID字符串是有效的十六进制格式,否则int.parse会抛出异常,可根据业务需求添加额外的格式校验逻辑。
内容的提问来源于stack exchange,提问作者Kyle Andrew
相关产品推荐
相关产品推荐

