【问题标题】:NSData length - Implicit conversion loses integer precisionNSData 长度 - 隐式转换失去整数精度
【发布时间】:2023-03-30 00:25:01
【问题描述】:

我有一点不明白的问题。

我在网上查了一下,但我不知道我的错误在哪里。

id manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
if (manufacturerData) {
    const uint8_t *bytes = [manufacturerData bytes];
    int len = [manufacturerData length];
    // skip manufacturer uuid
    NSData *data = [NSData dataWithBytes:bytes+2 length:len-2];

隐式转换丢失整数精度:“NSUInteger”(又名“unsigned long”)到“int”

【问题讨论】:

  • 阅读错误信息。解决方案就在您的眼前。编译器告诉你该怎么做。

标签: ios objective-c bluetooth-lowenergy


【解决方案1】:

请注意,您的 manufacturerData 变量的类型应该是 NSData,而不是 id

查看NSData 的文档。 length 属性的返回类型是什么?现在看看你正在使用的类型。看出区别了吗?

始终使用正确的数据类型。

您也可以使用subdataWithRange: 方法来代替字节。

NSData *manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
if (manufacturerData) {
    NSUInteger len = [manufacturerData length];
    // skip manufacturer uuid
    NSRange *dataRange = NSMakeRange(2, len - 2);
    NSData *data = [manufacturerData subdataWithRange:dataRange];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2017-03-02
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多