积土成山,风雨兴焉;积水成渊,蛟龙生焉。
Bluetooth
前言
我做iOS蓝牙开发这方面也有近一年时间,从开始的一窍不通到现在能流畅使用蓝牙库,有自己的上线产品,一路走来,说实话路有点颠簸。最近有点闲了,就想整理一下自己的所学到的知识,写出来和大家分享一下,初学者参考,大神们指正。
刚接触蓝牙最让我头疼的部分——蓝牙数据类型转换
- NSData 转换成 NSString
+ (NSString *)convertDataToHexStr:(NSData *)data {
if (!data || [data length] == 0) {
return @"";
}
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
[data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *dataBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[string appendString:hexStr];
} else {
[string appendFormat:@"0%@", hexStr];
}
}
}];
return string;
}
- NSString 转换成 NSData
+ (NSData *)hexStrToBytes:(NSString *)str {
NSMutableData *data = [NSMutableData data];
int idx;
for (idx = 0; idx + 2 <= str.length; idx += 2) {
NSRange range = NSMakeRange(idx, 2);
NSString *hexStr = [str substringWithRange:range];
NSScanner *scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValue length:1];
}
return data;
}
- 十六进制字符串转成十进制整型
+ (NSInteger)convertHexStringToInteger:(NSString *)hex {
NSString *tempStr = [NSString stringWithFormat:@"%lu",strtoul([hex UTF8String],0,16)];
//转成数字
int cycleNumber = [tempStr intValue];
return cycleNumber;
}
- 十进制整型转成十六进制字符串
+ (NSString *)hexStringWithDecimalism:(NSUInteger)originNum {
char hexChar[6];
//X 大写
sprintf(hexChar, "%X", (int)originNum);
return [NSString stringWithCString:hexChar encoding:NSUTF8StringEncoding];
}
后记
这些是我用到的基础,一些复杂的需要可以根据上面的方法变形来实现。