ios学习笔记之Object-C—字符串


在Object-c中,字符串的声明是:
NSString *aString; 
aString并不真正包含一个字符串对象—它是指向内存中字符串对象的指针。(和C语言中,用指针指向字符串的声明类似);
  • 字符串声明,以下三种方法:

NSString *a0 =[[NSString alloc]initWithFormat:@"kevin"];    //方法一

 

NSString *a1 =[[NSString alloc]initWithString:@"kevin"];   //方法二

 

NSString *a2= @"kevin";   //方法三

NSString *a3 = [[NSString alloc]initWithFormat:@"kevin"]; 

区别1:方法一用Format进行字符串的声明,方法二用String方法声明,第三种方法和用String声明基本一致,但是不初始化内存空间,方法一和方法二中,a0和a1使用结束后,需要进行内存释放,但是a2不需要进行内存释放。

区别2:用Format初始化的字符串,需要初始化一段动态内存空间,如:0x6a42a40,而用String声明的字符串,初始化的是常量内存区,如:0x46a8,常量内存区的地址,只要值相同,占用的地址空间是一致的。所以a1和a2的地址一致,但是a0和a3的地址不一致。

 

  • 将其它类型转化成字符串:

可以使用Format,以整型为例,如:

int i = 100;

NSString *b = [[NSString alloc]initWithFormat:@"%d",i]; //如果是float型,可以用%f

NSLog(@"b =%@",[b description]);

结果输出:b =100 

 

  • 求字符串长度:

用length求字符串长度,如:

 

NSLog(@"a1 =%d",a1.length);

结果输出a1 = 5

注意这里和C语言的不同,C语言中,字符串的结束是以'\0'结束,而OC不是。

 

  • 拼接、求子字符串:

拼接,使用stringByAppendingString,如:

NSString *a4= @"2012"; 

 

NSString *c =[a0 stringByAppendingString:a4];

 

 

 

NSLog(@"c = %@",c);

结果输出:c = kevin2012

求子字符串,有三种方式:

 

1、substringFromIndex:x   //从索引x开始到结束,包含索引x指向的值(索引的理解有点像C语言中数组的下标)

 

2、substringToIndex:x   //从开始到索引x之前结束,不包含索引x指向的值

 

3、substringWithRange   //定义一个区间,有开始位置和截取长度

如下:

 

NSString *d =[a1 substringFromIndex:1];

 

NSString *e =[a1 substringToIndex:3];

NSLog(@"d = %@,e =%@",d,e);

结果输出为:d = evin,e = kev

substringWithRange先定义区间,如下:

 

NSRange r = {2,3};    //从索引2开始,截取3个长度

 

NSString *f = [csubstringWithRange:r];

NSLog(@"f = %@",f);

结果输出为:f = vin

 

  • 字符串转化成其它类型:

 

int j =[a4 intValue];   //如果字符串由数字开头,转化为起始的数字,否则转化为0

 

NSLog(@"j = %d",j);

还可以转化为float,BOOL型,查文档得知,如果转化为BOOL型,Returns YES on encountering one of "Y", "y","T", "t", or a digit 1-9—the method ignores any trailingcharacters. Returns NO if the receiver doesn’t begin with a validdecimal text representation of anumber.(由Y,y,T,t,1-9开始的字符串转化为YES,其余的为NO)

 

 

  • 比较字符串是否相等:

 

a0 isEqual:(id)   //a和一个对象进行判断,比较的是地址,如果发现传进来的都是字符串,直接比较字符串大小,若相等,就返回YES,如果不是字符串,就进行地址比较

 

a0 isEqualToString:b   //a和字符串b进行比较,比较字符串大小

如下:

 

BOOL c1 = [@"12"isEqual:@"12"];

BOOL c2 = [@"12"isEqualToString:@"12"];

 

BOOL c3 = [a0isEqualToString:a1];

 

NSLog(@"c1 = %d,c2 = %d,c3 =%d",c1,c2,c3);

结果输出为:c1 = 1,c2 = 1,c3 = 0;

 

 

  • 比较字符串大小:

 

使用compare:升序返回-1,相等返回0,降序返回1

如下:

 

NSString *k1 = @"ABC";

NSString *k2 = @"ABc";

NSComparisonResult r1 = [k1compare:k2];

NSLog(@"r1 = %d",r1);

结果输出为r1 = -1

 

转化字符串大小写:

 

lowercaseString:     //转化成小写

 

uppercaseString:    //转化成大写

如下:

 

NSString *k3 = [k1lowercaseString];  

NSString *k4 = [d1uppercaseString]; 

 

NSLog(@"k3 = %@,k4 =%@",k3,k4);

结果输出为:k3 = abc,k4 =ABC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中使用公钥字符串进行RSA加密的步骤如下: 1. 将公钥字符串转换为NSData类型。 ``` NSString *publicKeyString = @"-----BEGIN PUBLIC KEY-----\n...公钥字符串...\n-----END PUBLIC KEY-----"; NSData *publicKeyData = [publicKeyString dataUsingEncoding:NSUTF8StringEncoding]; ``` 2. 创建SecKey对象。 ``` NSMutableDictionary *publicKeyAttributes = [[NSMutableDictionary alloc] init]; [publicKeyAttributes setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; [publicKeyAttributes setObject:@(2048) forKey:(__bridge id)kSecAttrKeySizeInBits]; [publicKeyAttributes setObject:publicKeyData forKey:(__bridge id)kSecValueData]; [publicKeyAttributes setObject:(__bridge id)kSecAttrKeyClassPublic forKey:(__bridge id)kSecAttrKeyClass]; SecKeyRef publicKey; OSStatus status = SecItemAdd((__bridge CFDictionaryRef)publicKeyAttributes, (CFTypeRef *)&publicKey); ``` 3. 使用SecKey对象进行加密。 ``` NSData *plainData = [@"要加密的数据" dataUsingEncoding:NSUTF8StringEncoding]; size_t cipherBufferSize = SecKeyGetBlockSize(publicKey); uint8_t *cipherBuffer = malloc(cipherBufferSize); memset(cipherBuffer, 0, cipherBufferSize); OSStatus status = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, [plainData bytes], [plainData length], cipherBuffer, &cipherBufferSize); NSData *encryptedData = [NSData dataWithBytesNoCopy:cipherBuffer length:cipherBufferSize]; ``` 4. 释放SecKey对象。 ``` CFRelease(publicKey); ``` 注意:在iOS中使用公钥加密时,需要使用PKCS#1填充模式(kSecPaddingPKCS1)。另外,如果公钥字符串中的换行符不是`\n`,需要将其替换为`\n`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值