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

iOS开发水平不高,但是最近公司在做蓝牙开发,无奈中强迫搜集了很多进制,字符串及NSData的转换方法,今天总结了下!

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进制转16进制:

-(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进制转换成十进制:

- (NSString *)to10:(NSString *)num

{

    NSString *result = [NSString stringWithFormat:@"%ld", strtoul([num UTF8String],0,16)];

    return result;

}


16 进制的字符串转换成 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 字符串转换16进制:

-(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进制字符串转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 高低位互换

高低位互换(俩字节的)

    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 字符串补零操作

-(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进制转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进制数中的第一位(高位*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进制数中的第二位(低位)

        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)十六进制转换为普通字符串

-(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) 十六进制转换为普通字符串的。 

+ (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; 

 

 




自己总结的很小的方法:

输出16个同样的数字  转化为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;

}






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值