iOS 蓝牙开发用到的一些格式转换
iOS開發(fā)水平不高,但是最近公司在做藍(lán)牙開發(fā),無奈中強(qiáng)迫搜集了很多進(jìn)制,字符串及NSData的轉(zhuǎn)換方法,今天總結(jié)了下!
1 獲得字符串的長度:
-(int)convertToInt:(NSString*)strtemp {
?? ?
? ? int strlength = 0;
? ? char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
? ? for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
? ? ? ? if (*p) {
? ? ? ? ? ? p++;
? ? ? ? ? ? strlength++;
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? p++;
? ? ? ? }
? ? }
? ? return (strlength+1)/2;
?? ?
}
2 10進(jìn)制轉(zhuǎn)16進(jìn)制:
-(NSString *)ToHex:(long long int)tmpid
{
? ? NSString *nLetterValue;
? ? NSString *str =@"";
? ? long long int ttmpig;
? ? for (int i = 0; i<9; i++) {
? ? ? ? ttmpig=tmpid%16;
? ? ? ? tmpid=tmpid/16;
? ? ? ? switch (ttmpig)
? ? ? ? {
? ? ? ? ? ? case 10:
? ? ? ? ? ? ? ? nLetterValue =@"A";break;
? ? ? ? ? ? case 11:
? ? ? ? ? ? ? ? nLetterValue =@"B";break;
? ? ? ? ? ? case 12:
? ? ? ? ? ? ? ? nLetterValue =@"C";break;
? ? ? ? ? ? case 13:
? ? ? ? ? ? ? ? nLetterValue =@"D";break;
? ? ? ? ? ? case 14:
? ? ? ? ? ? ? ? nLetterValue =@"E";break;
? ? ? ? ? ? case 15:
? ? ? ? ? ? ? ? nLetterValue =@"F";break;
? ? ? ? ? ? default:nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];
?? ? ? ? ? ? ? ?
? ? ? ? }
? ? ? ? str = [nLetterValue stringByAppendingString:str];
? ? ? ? if (tmpid == 0) {
? ? ? ? ? ? break;
? ? ? ? }
?? ? ? ?
? ? }
? ? return str;
}
3 16進(jìn)制轉(zhuǎn)換成十進(jìn)制:
- (NSString *)to10:(NSString *)num
{
? ? NSString *result = [NSString stringWithFormat:@"%ld", strtoul([num UTF8String],0,16)];
? ? return result;
}
4?將16進(jìn)制的字符串轉(zhuǎn)換成NSData:?
- (NSData *)convertHexStrToData:(NSString *)str {
? ? if (!str || [str length] == 0) {
? ? ? ? return nil;
? ? }
?? ?
? ? NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
? ? NSRange range;
? ? if ([str length] % 2 == 0) {
? ? ? ? range = NSMakeRange(0, 2);
? ? } else {
? ? ? ? range = NSMakeRange(0, 1);
? ? }
? ? for (NSInteger i = range.location; i < [str length]; i += 2) {
? ? ? ? unsigned int anInt;
? ? ? ? NSString *hexCharStr = [str substringWithRange:range];
? ? ? ? NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
?? ? ? ?
? ? ? ? [scanner scanHexInt:&anInt];
? ? ? ? NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
? ? ? ? [hexData appendData:entity];
?? ? ? ?
? ? ? ? range.location += range.length;
? ? ? ? range.length = 2;
? ? }
?? ?
? ? NSLog(@"hexdata: %@", hexData);
? ? return hexData;
}
5 字符串轉(zhuǎn)換16進(jìn)制:
-(NSString *)hexStringFromString:(NSString *)string{
NSData *myD=[string dataUsingEncoding:NSUTF8StringEncoding];
Byte *bytes=(Byte *)[myD bytes];
//byte-16
NSString *hexStr=nil;
for (int i=0; i<[myD length];i++) {
? ? NSString *newHexStr=[NSString stringWithFormat:@"%x",bytes[i]&0xff];
? ? if ([newHexStr length]==1) {
? ? ? ? hexStr=[NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
? ? }else{
? ? ? ? hexStr=[NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
? ? }
}
return hexStr;
}
6 16進(jìn)制字符串轉(zhuǎn)byte格式
-(NSData*) hexToBytes:(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;
}
高低位互換(倆字節(jié)的)
? ? unsigned short int a=0xa55a;
? ? unsigned short int b=((a&0x00ff)<<8)|(a>>8);
? ? NSLog(@"%d",b);
字符串高低位互換
-(NSMutableString *)transform:(NSString *)string{
NSMutableString *newStr = [NSMutableString string];
NSInteger length = string.length;
for (int i = 0; i < length / 2; i++) {
? ? NSString *str1 = [string substringWithRange:NSMakeRange(length - (i+1) * 2 , 2)];
? ? [newStr insertString:str1 atIndex:i * 2];
}
return newStr;
}
8 字符串補(bǔ)零操作
-(NSString *)addZero:(NSString *)str withLength:(int)length{
?? NSString *string=nil;
? ? if (str.length<length) {
? ? ? ? for (int i=0;i<length-str.length; i++) {
? ? ? ? ? ? string=[NSString stringWithFormat:@"0%@",str];
? ? ? ? ? ? str=string;
? ? ? ? }
? ? }
? ? return string;
?? ?
}
9 16進(jìn)制轉(zhuǎn)ascii碼
- (int)inspection {
? ? int temp = 0;
? ? NSString *hexString = [NSString stringWithFormat:@"51%@%@",_blueToothName,_keyId];
? ? for(int i=0;i<[hexString length];i++)
? ? {
? ? ? ? int int_ch;?
?? ? ? ?
? ? ? ? unichar hex_char1 = [hexString characterAtIndex:i]; 兩位16進(jìn)制數(shù)中的第一位(高位*16)
?? ? ? ?
? ? ? ? int int_ch1;
? ? ? ? if(hex_char1 >= '0' &&hex_char1 <='9')
? ? ? ? ? ? int_ch1 = (hex_char1-48)*16; ? 0 的Ascll - 48
? ? ? ? else if(hex_char1 >= 'A' &&hex_char1 <='F')
? ? ? ? ? ? int_ch1 = (hex_char1-55)*16; A 的Ascll - 65
? ? ? ? else
? ? ? ? ? ? int_ch1 = (hex_char1-87)*16; a 的Ascll - 97
? ? ? ? i++;
?? ? ? ?
? ? ? ? unichar hex_char2 = [hexString characterAtIndex:i]; ///兩位16進(jìn)制數(shù)中的第二位(低位)
? ? ? ? int int_ch2;
? ? ? ? if(hex_char2 >= '0' &&hex_char2 <='9')
? ? ? ? ? ? int_ch2 = (hex_char2-48); 0 的Ascll - 48
? ? ? ? else if(hex_char2 >= 'A' &&hex_char2 <='F')
? ? ? ? ? ? int_ch2 = hex_char2-55; A 的Ascll - 65
? ? ? ? else
? ? ? ? ? ? int_ch2 = hex_char2-87; a 的Ascll - 97
?? ? ? ?
? ? ? ? int_ch = int_ch1+int_ch2;
?? ? ? ?
? ? ? ? temp = temp ^ int_ch;
? ? ? ?
? ? }
? ? NSString *hexString11 = [NSString stringWithFormat:@"%@",[[NSString alloc] initWithFormat:@"%1x",temp]];
? ? NSLog(@"+++++%@",hexString11);
? ? return temp;
}
(1)十六進(jìn)制轉(zhuǎn)換為普通字符串
-(NSData *)getByte16FromString:(NSString *)str length:(NSInteger)length{
SignedByte bytes[length];
for (int i=0; i<length;i++) {
? ? int j=i*2;
? ? NSString *tmp=[str substringWithRange:NSMakeRange(j, 2)];
? ? unsigned int anInt;
? ? NSScanner * scanner = [[NSScanner alloc] initWithString:tmp];
? ? [scanner scanHexInt:&anInt];
? ? bytes[i]=anInt;
}
return [NSData dataWithBytes:bytes length:length]; ??
}
(2)?十六進(jìn)制轉(zhuǎn)換為普通字符串的。?
+ (NSString *)stringFromHexString:(NSString *)hexString { //?
?
char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1);?
bzero(myBuffer, [hexString length] / 2 + 1);?
for (int i = 0; i < [hexString length] - 1; i += 2) {?
unsigned int anInt;?
NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)];?
NSScanner * scanner = [[[NSScanner alloc] initWithString:hexCharStr] autorelease];?
[scanner scanHexInt:&anInt];?
myBuffer[i / 2] = (char)anInt;?
}?
NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];?
NSLog(@"------字符串=======%@",unicodeString);?
return unicodeString;?
?
?
}?
自己總結(jié)的很小的方法:
輸出16個同樣的數(shù)字? 轉(zhuǎn)化為data
-(NSData *)nslogData:(NSString *)str{
? ? NSMutableString *string=[[NSMutableString alloc]init];
? ? for (int i=0; i<32;i++) {
? ? ? ? [string appendString:str];
?? ? ? ?
? ? }
? ? NSData *data=[[NSData alloc]init];
? ? data=[NSStringTool convertHexStrToData:string];
? ? return data;
}
總結(jié)
以上是生活随笔為你收集整理的iOS 蓝牙开发用到的一些格式转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux生产环境下安装anaconda
- 下一篇: 肌电信号 聚类 Matlab