UWP开发连接BLE设备时Guid格式异常问题求助
解决UWP BLE连接时的Guid FormatException问题
你遇到的这个System.FormatException看起来有点让人困惑,毕竟你写的128位UUID格式表面上完全符合要求。我们一步步来排查和解决:
先拆解错误根源
你收到的错误提示:
System.FormatException: 'Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).'
这说明传入的Guid字符串不符合解析规则,可能的隐藏问题有这几个:
- 字符串前后带了看不见的空白字符(比如复制粘贴时不小心带了空格、换行)
- 虽然大小写不影响Guid解析,但如果字符串里混入了非十六进制字符也会报错(不过你的字符串里的
F和B都是合法的) - 构造Guid时的字符串存在细微格式偏差
解决方案一:用预定义的Gatt服务UUID最省心
对于常见的BLE服务,UWP已经内置了预定义常量,完全不用手动写字符串,从根源上避免格式错误。比如你要访问的健康温度服务(UUID 1809),可以直接调用GattServiceUuids.HealthThermometer:
GattDeviceServicesResult result = await GetGattServicesForUuidAsync( GattServiceUuids.HealthThermometer, BluetoothCacheMode.Uncached );
这种方式不仅可靠,还能减少手动输入的失误。
解决方案二:验证并正确构造Guid
如果一定要手动指定Guid字符串,先通过Guid.TryParse验证有效性,提前排查格式问题:
string serviceUuidStr = "00001809-0000-1000-8000-00805F9B34FB"; if(Guid.TryParse(serviceUuidStr, out Guid serviceUuid)) { GattDeviceServicesResult result = await GetGattServicesForUuidAsync( serviceUuid, BluetoothCacheMode.Uncached ); } else { // 这里可以处理字符串格式错误的情况 Debug.WriteLine("Invalid Guid format!"); }
另外,检查一下你复制的字符串有没有多余字符,比如前后的空格,可以先调用Trim()处理:
string serviceUuidStr = "00001809-0000-1000-8000-00805F9B34FB".Trim(); Guid serviceUuid = new Guid(serviceUuidStr);
额外提示
你从16位UUID转换为128位的规则是正确的(把16位UUID放在0000xxxx-0000-1000-8000-00805F9B34FB的xxxx位置),所以问题大概率出在字符串本身的格式细节上。
内容的提问来源于stack exchange,提问作者Shikhar Tandon
相关产品推荐
相关产品推荐

