Parse Characteristics.Value为字节整数格式

时间:2015-02-03 06:34:47

标签: ios objective-c integer hex core-bluetooth

我在做核心蓝牙应用程序。我能够连接外围设备并从中读取,写入值。

我需要将通过characteristic.value接收的数据解析为整数格式。 我的特征值为<011f6d00 00011100 00000000 04050701 05000569 07df0203 020b0d21 02ff33>

我根据理解划分了数据。 请帮我提供转换数据的示例代码。由于我是iOS新手,观察了很多链接,但没有找到确切的答案

  <011f6d00 

11 00  event id       //2 bytes

00    event type      //1 byte

00    No of packets            //1 byte

00 00 record count               //2 byte

04 05 total duration            //2 byte

07       sensitivity            //1 byte

01    recording sensitivity   //1 byte

05    expected seizure duration  //1 byte

00    Not used parameter       //1 byte

05    Expected recorded duration     //1 byte

69    not used parameters     //1 byte

07    snooze duration       //1 byte

df    disable watch help button    //1 byte   

02 03  year        //2 byte

02    date of month     //1 byte

0b    day of week      //1 byte

0d    hour             //1 byte

21    minute            //1 byte

02   second             //1 byte

ff33>    crc          //2 byte

1 个答案:

答案 0 :(得分:3)

NSData *initialData = [yourCharacteristic value];

解析数据的一种方法是使用subdataWithRange:的{​​{1}}方法。

示例:

NSData

输出:

NSData *startOfFrameData = [data subdataWithRange:NSMakeRange(0, 4)];
NSLog(@"StartOfFrameData: %@", startOfFrameData);
NSData *eventIDData = [data subdataWithRange:NSMakeRange(4, 2)];
NSLog(@"eventIDData: %@", eventIDData);

请注意,我可能已经颠倒了>StartOfFrame: <011f6d00> >eventIDData: <0001> 的顺序,其范围可能是eventIDData(而不是(6,2)),但您会得到完整的想法。

然后,您必须“理解”数据的含义并找到正确的格式,(4,2)的示例(可能):

eventIDData

等等......

如果你想用它“玩”而不再一次又一次地读取特征值(这也意味着连接等),这里有一个你可以使用的方法:

UInt16 eventID;
[eventIDData getBytes:&eventID length:sizeof(eventID)];
NSLog(@"eventID: %d", eventID);

使用示例:

-(NSData *)dataWithStringHex:(NSString *)string
{
    NSString *cleanString;
    cleanString = [string stringByReplacingOccurrencesOfString:@"<" withString:@""];
    cleanString = [cleanString stringByReplacingOccurrencesOfString:@">" withString:@""];
    cleanString = [cleanString stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSInteger length = [cleanString length];
    uint8_t buffer[length/2];
    for (NSInteger i = 0; i < length; i+=2)
    {
        unsigned result = 0;
        NSScanner *scanner = [NSScanner scannerWithString:[cleanString substringWithRange:NSMakeRange(i, 2)]];
        [scanner scanHexInt:&result];
        buffer[i/2] = result;
    }
    return  [[NSMutableData alloc] initWithBytes:&buffer length:length/2];
}

这样,您可以尝试在其他示例/项目/ beta测试代码上解析数据。