iOS中用CocoaMQTT解码The Things Network payload的方法求助
解决iOS中The Things Network MQTT payload解码问题
针对你遇到的ASCII码数组形式payload解码问题,可通过以下两种方式处理:
直接利用系统API解码
message.payload是Data类型,直接使用String的初始化方法指定ASCII编码即可完成转换:
func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16) { if let decodedString = String(data: message.payload, encoding: .ascii) { // 解码成功,处理得到的字符串 print("解码结果:\(decodedString)") } else { print("ASCII编码解码失败") } }
手动遍历字节转换
如果系统API解码失败,可手动遍历Data中的每个UInt8字节(对应ASCII码值),转换为字符后拼接成字符串:
func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16) { let asciiCharacters = message.payload.map { Character(UnicodeScalar($0)) } let decodedString = String(asciiCharacters) print("手动解码结果:\(decodedString)") }
相关参考内容
- Apple官方文档中,
String(data:encoding:)方法支持将Data转换为指定编码的字符串,涵盖ASCII、UTF-8等多种编码 Data类型的map方法可遍历字节集合,配合UnicodeScalar可实现字节到ASCII字符的精准转换
内容的提问来源于stack exchange,提问作者Huy Nguyen Quang
相关产品推荐
相关产品推荐

