【问题标题】:Create a 128Bit UUID with String使用字符串创建 128 位 UUID
【发布时间】:2012-09-04 12:43:43
【问题描述】:

我尝试用 iOS CoreBluetooth 框架创建一个 128Bit。

我写的代码在这里:

//16Bit Value-String
static NSString * const ADVERTISING_SERVICE_16=@"FFC0";

//Var for 128Bit String
static NSString * ADVERTISING_SERVICE;


//A Base UUID 
static NSString * const BASE_UUID=@"0405060708090A0B0C0D0E0F";

+ (NSString*) get128BitUUID:(NSString*)uuid{
    return [[NSString alloc] initWithFormat:@"0000%@%@",uuid,BASE_UUID];
}

ADVERTISING_SERVICE = [UUIDFuncs get128BitUUID:ADVERTISING_SERVICE_16];

现在,当我尝试用这个获取 UUID 时:

if([service.UUID isEqual:[CBUUID UUIDWithString:ADVERTISING_SERVICE] ]){
    [peripheral discoverCharacteristics:nil forService:service];
}

我收到此错误消息:

2012-09-04 14:18:06.127 blukiiFirmwareTest[3154:707] *** Terminating app due to uncaught
exception 'Invalid UUID string', reason: 'String 0000FFC00405060708090A0B0C0D0E0F 
does not represent a valid UUID'

我不明白为什么;该字符串是一个 16 字节长的 UUID,这是 128 位,为什么会出现此错误?

【问题讨论】:

  • UUID 是一种标准格式,而不仅仅是一串HexText。
  • 使用蓝牙 Base UUID 时出现同样的错误。
  • @nivek 那么,当使用像“1813”这样的基本 UUID 时,你是如何解决这个问题的?也许真的是很久以前的事了,不过我也遇到过这个问题。
  • 像“1813”这样的基本 UUID 是什么意思?我通过使用蓝牙标准中的蓝牙基础 uuid 解决了这个问题。因此,当您使用此 [CBUUID UUIDWithString:@"1813"] 时,您将在正确的位置获得蓝牙 Base UUID +您的自定义 16Bit uuid 作为 uuid 字符串。

标签: objective-c bluetooth uuid energy


【解决方案1】:

在命令行输入uuidgen创建一个新的随机uuid:

0C50D390-DC8E-436B-8AD0-A36D1B304B18

你会看到它是 8-4-4-4-12 的形式,正如@PenguinCoder 链接的维基百科页面所提到的那样。

使用这种格式的字符串创建CBUUID 将起作用:

CBUUID *uuid = [CBUUID UUIDWithString:@"0C50D390-DC8E-436B-8AD0-A36D1B304B18"];

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 2013-08-09
    • 1970-01-01
    • 2016-08-23
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多