【发布时间】:2018-04-06 01:03:24
【问题描述】:
我无法将 CBCharacteristic 的 NSData 类型的 value 属性转换为 NSString。我尝试了通常的 initWithData:encoding: NSString 方法,如下所示。但它返回零。
NSString *str = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);
当我直接对值执行 NSLog 时,我能够在控制台上看到字符串值。
NSLog(@"characteristic.value: %@", characteristic.value);
谁能给出关于如何从characteristic.value中获取字符串值的任何想法?
【问题讨论】:
-
并非所有二进制数据 (
NSData) 在 UTF8 字符串中都有意义。如果你转换[[NSString alloc] initWithData:UIImagePNGRepresentation(someUIImage) encoding:NSUTF8StringEncoding];,你可能会得到 nil。 -
@Larme:是的,正确的。但在这种情况下,它是一个已知的特征,它有一个十六进制的 no 作为字符串(uuid 格式)。当我打印数据时,我能够看到它的价值。 NSLog(@"characteristic.value: %@", characteristic.value);
-
然后向我们展示您想要的价值和结果。
-
它打印。值:。这是分配给特征的默认值。我已经在我的代码中硬连线了这个值。如果特征具有这个值,那么我将不得不进行一些计算并将其值更改为其他值。
-
如果您只是想检查它是否相等,您可以使用stackoverflow.com/questions/7317860/… 将
@"11122334 45566778 899aabbc cddeeff0 00"as NSString 转换为 NSData 并执行isEqual:。
标签: ios objective-c bluetooth-lowenergy core-bluetooth cbcentralmanager