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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:34:55