日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 蓝牙开发用到的一些格式转换

發(fā)布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 蓝牙开发用到的一些格式转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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];

//byte16

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;

}


7 高低位互換

高低位互換(倆字節(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;

?? ?

}


還有些自己無法驗(yàn)證正確性的方法和自己也沒使用過的:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。