Swift中如何将BLE特征值的length、bytes数据转换为字符串
实现方案
前置扩展(通用工具)
给Swift原生Data添加十六进制字符串转换能力,全局可复用:
extension Data { /// 转换为小写十六进制字符串 var hexString: String { return map { String(format: "%02hhx", $0) }.joined() } }
如果需要大写十六进制,将格式符%02hhx替换为%02hhX即可。
1. 提取0x开头的纯十六进制特征值
// 安全解包特征值,禁止使用!强制解包避免崩溃 if let value = characteristic.value { let resultHex = "0x" + value.hexString print(resultHex) // 输出示例:0xfdf648dc3ae1697b }
2. 生成指定格式的完整字符串
直接手动拼接即可得到{length = 8, bytes = 0xfdf648dc3ae1697b}格式的结果:
if let value = characteristic.value { let formatResult = "{length = \(value.count), bytes = 0x\(value.hexString)}" print(formatResult) // 完全匹配你需要的输出格式 }
注意事项
- 不要依赖
String(describing: NSData())的输出做格式截取,系统对NSData的描述文本可能随iOS版本迭代调整,手动拼接的兼容性和可控性更强 - 蓝牙特征值
characteristic.value为可选类型,必须使用if let/guard let安全解包,空值下强制解包会直接触发App崩溃
内容的提问来源于stack exchange,提问作者codethesolution
相关产品推荐
相关产品推荐

