zoukankan      html  css  js  c++  java
  • int、NSInteger、NSNumber和NSString以及相互转换

     NSInteger:

    #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
    
    typedef long NSInteger;
    
    typedef unsigned long NSUInteger;
    
    #else
    
    typedef int NSInteger;
    
    typedef unsigned int NSUInteger;
    
    #endif

    由定义可知,在32系统下NSInteger 即为int,在64位系统下NSInteger位long。苹果的官方文档中总是推荐用NSInteger。

    总结:NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)。

    当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。

    在开发中只需使用NSInteger即可。

     

     

    NSNumber:Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。

    NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:

    NSArray *array= [[NSArray alloc]init];
    [array addObject:3];//会编译错误

    这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘3’不是。这个时候需要用到NSNumber:

    NSArray *array= [[NSArray alloc]init];
    [array addObject:[NSNumber numberWithInt:3]];

    Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。

    例如以下封装方法:

    + (NSNumber*)numberWithChar: (char)value;
    + (NSNumber*)numberWithInt: (int)value;
    + (NSNumber*)numberWithFloat: (float)value;
    + (NSNumber*)numberWithBool: (BOOL) value;

    将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

    - (char)charValue;
    - (int)intValue;
    - (float)floatValue;
    - (BOOL)boolValue;
    - (NSString*)stringValue;

                                                                       相互之间的转换

    1: NSString  <==> NSInteger

     NSInteger转化 NSString类型:
          [ NSString  stringWithFormat:  @"%d" , NSInteger];
    NSString转化 NSInteger类型:
          NSInteger = [ NSString   intValue ] 

    2 : NSString <==> NSNumber

    将NSNumber转换为NSString
    
    NSNumber *A;
    NSString *B;
    NSNumberFormatter* numberFormatter = [[NSNumberFormatteralloc] init];
    B = [numberFormatter stringFromNumber:A];
    将NSString转换为NSNumber    
    
        NSString *ss=@"224.34129";
        NSNumber*result;
        NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
        result=[f numberFromString:ss];
        if(!(result))
        {
            result=ss;
        }
        NSLog(@"%.2f",[result floatValue]);

    3.NSString 与 int ,float,double,NSInteger之间的转换  

     NSString *teststring = @"32.54" ;
    
        int i = [teststring intValue ];
    
        float i1 = [teststring floatValue ];
    
        double i2 = [teststring doubleValue ];
    
        NSInteger i3 = [teststring integerValue ];
    
        
    
        NSString *tostring = nil ;
    
        tostring = [ NSString stringWithFormat: @"%d" ,i];
    
        NSLog ( @"tostring-int:%@",tostring);
    
        tostring = [ NSString stringWithFormat: @"%.3f" ,i1];
    
        NSLog ( @"tostring-float:%@",tostring);
    
        tostring = [ NSString stringWithFormat: @"%e" ,i2];
    
        NSLog ( @"tostring-double:%@",tostring);
    
     

    4.nsstring和float 还有int之间的转换

     NSString *tempA = @"123";
    
    NSString *tempB = @"456";
    
     
    
    1,字符串拼接
    
    NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];
    
     
    
    2,字符转int
    
    int intString = [newString intValue];
    
     
    
    3,int转字符
    
    NSString *stringInt = [NSString stringWithFormat:@"%d",intString];
    
     
    
    4,字符转float
    
    float floatString = [ newString floatValue];
    
    
    5,float转字符
    
    NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

     

     
     
     
  • 相关阅读:
    BZOJ4944 泳池 解题报告
    简短的开始
    树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题
    三月月考暨省队选拔
    Luogu P1245 电话号码
    JXOJ(基于UOJ)部署日志
    入学考试总结_20190310
    十二月月考之生物总结
    寒假作业完成进度
    discuz在windows下的环境配置遇到的问题总结
  • 原文地址:https://www.cnblogs.com/liuziyu/p/4214984.html
Copyright © 2011-2022 走看看