将 Characterstic.Value 解析为字节整数格式
Parse Characterstic.Value to byte integer format
我正在做核心蓝牙应用。我能够连接外围设备并从中读取、写入值。
我需要将通过 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
NSData *initialData = [yourCharacteristic value];
解析数据的一种方法是使用 NSData
的 subdataWithRange:
方法。
示例:
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)
),但您会明白整个想法。
然后,你必须"understand"数据的含义并找到正确的格式,示例(可能)为eventIDData
:
UInt16 eventID;
[eventIDData getBytes:&eventID length:sizeof(eventID)];
NSLog(@"eventID: %d", eventID);
等等...
如果你想"play"用它而不是每次都一遍又一遍地读取特征值(这意味着也连接等),这里有一个方法你可以使用:
-(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];
}
使用示例:
NSData *initialData = [self dataWithStringHex:@"<011f6d00 00011100 00000000 04050701 05000569 07df0203 020b0d21 02ff33>"];
这样,您可以尝试在另一个 example/project/beta 测试代码上解析您的数据。
我正在做核心蓝牙应用。我能够连接外围设备并从中读取、写入值。
我需要将通过 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
NSData *initialData = [yourCharacteristic value];
解析数据的一种方法是使用 NSData
的 subdataWithRange:
方法。
示例:
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)
),但您会明白整个想法。
然后,你必须"understand"数据的含义并找到正确的格式,示例(可能)为eventIDData
:
UInt16 eventID;
[eventIDData getBytes:&eventID length:sizeof(eventID)];
NSLog(@"eventID: %d", eventID);
等等...
如果你想"play"用它而不是每次都一遍又一遍地读取特征值(这意味着也连接等),这里有一个方法你可以使用:
-(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];
}
使用示例:
NSData *initialData = [self dataWithStringHex:@"<011f6d00 00011100 00000000 04050701 05000569 07df0203 020b0d21 02ff33>"];
这样,您可以尝试在另一个 example/project/beta 测试代码上解析您的数据。