我在做核心蓝牙应用程序。我能够连接外围设备并从中读取,写入值。
我需要将通过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
答案 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测试代码上解析数据。