IOS中的数据类型转换

1. NSData 与 NSString
NSData-> NSString
NSString  *aString = [[NSString  alloc]  initWithData:adataencoding:NSUTF8StringEncoding];
 
NSString->NSData
NSString  *aString =  @"1234abcd";
NSData  *aData = [aString  dataUsingEncoding:  NSUTF8StringEncoding];
 
2.NSData  与  Byte
NSData-> Byte数组
NSString  *testString =  @"1234567890";
NSData  *testData = [testString  dataUsingEncoding:  NSUTF8StringEncoding];
Byte  *testByte = (Byte  *)[testData bytes];
for(int  i=0;i<[testData  length];i++)
printf("testByte = %d\n",testByte[i]);
 
Byte数组-> NSData
Byte  byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
NSData  *adata = [[NSData  alloc]  initWithBytes:byte  length:24];
 
Byte数组->16进制数
Byte  *bytes = (Byte  *)[aData bytes];
NSString  *hexStr=@"";
for(int  i=0;i<[encryData  length];i++)
{
NSString  *newHexStr = [NSString  stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
if([newHexStr  length]==1)
hexStr = [NSString  stringWithFormat:@"%@0%@",hexStr,newHexStr];
else
hexStr = [NSString  stringWithFormat:@"%@%@",hexStr,newHexStr];
}
NSLog(@"bytes  的16进制数为:%@",hexStr);
 
16进制数->Byte数组
将16进制数据转化成Byte  数组
NSString  *hexString =  @"3e435fab9c34891f";  //16进制字符串
int  j=0;
Byte  bytes[128];    ///3ds key的Byte  数组,  128位
for(int  i=0;i<[hexString  length];i++)
{
int  int_ch;    ///  两位16进制数转化后的10进制数
 
unichar  hex_char1 = [hexString  characterAtIndex:i];  两位16进制数中的第一位(高位*16)
int  int_ch1;
if(hex_char1 >=  '0'  && hex_char1 <='9')
int_ch1 = (hex_char1-48)*16;     的Ascll - 48
else  if(hex_char1 >=  'A'  && hex_char1 <='F')
int_ch1 = (hex_char1-55)*16;  的Ascll - 65
else
int_ch1 = (hex_char1-87)*16;  的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);  的Ascll - 48
else  if(hex_char1 >=  'A'  && hex_char1 <='F')
int_ch2 = hex_char2-55;  的Ascll - 65
else
int_ch2 = hex_char2-87;  的Ascll - 97
 
int_ch = int_ch1+int_ch2;
NSLog(@"int_ch=%d",int_ch);
bytes[j] = int_ch;    ///将转化后的数放入Byte数组里
j++;
}
NSData  *newData = [[NSData  alloc]  initWithBytes:bytes  length:128];
NSLog(@"newData=%@",newData);
 
3. NSData  与  UIImage
NSData->UIImage
UIImage  *aimage = [UIImage  imageWithData: imageData];
 
//例:从本地文件沙盒中取图片并转换为NSData
NSString  *path = [[NSBundle  mainBundle]  bundlePath];
NSString  *name = [NSString  stringWithFormat:@"ceshi.png"];
NSString  *finalPath = [path  stringByAppendingPathCom ponent:name];
NSData  *imageData = [NSData  dataWithContentsOfFile: finalPath];
UIImage  *aimage = [UIImage  imageWithData: imageData];
 
UIImage-> NSData
NSData  *imageData =  UIImagePNGRepresentation (aimae);
  IOS中的数据类型转换


一、基础数据类型

IOS代码
       1.       NSString  *tempA  @"123"; 
       2.       NSString  *tempB  @"456"; 

1,字符串拼接

       1.       NSString  *newString  [NSString  stringWithFormat:@"%@%@",tempA,tempB]; 

2,字符转int

       1.       int  intString  [newString  intValue]; 

3,int转字符

       1.       NSString  *stringInt  [NSString  stringWithFormat:@"%d",intString]; 

4,字符转float

       1.       float  floatString  [newString  floatValue]; 

5,float转字符

       1.       NSString  *stringFloat  [NSString  stringWithFormat:@"%f",intString]; 



二、常用数据类型


一、time_t介绍

包含文件:
#ifndef  __TIME_T
#define  __TIME_T               
typedef long         time_t;     
#endif
既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够表示更久远的时间,一些编译器厂商引入了64位甚至更长的整形数来保存日历时间。比如微软在Visual C++中采用了__time64_t数据类型来保存日历时间,并通过_time64()函数来获得日历时间(而不是通过使用32位字的time()函数),这样就可以通过该数据类型保存3001年1月1日0时0分0秒(不包括该时间点)之前的时间。


在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:
 
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
 
此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:
 
struct tm * gmtime(const time_t *timer);                                                                               
struct tm * localtime(const time_t * timer);
二、time_t转换为NSString

       1)转换方法如下:

-(NSString *)dateInFormat:(time_t)dateTime format:(NSString*) stringFormat
{
      char buffer[80];
      const char *format = [stringFormat UTF8String];
      struct tm * timeinfo;
      timeinfo = localtime(&dateTime);
      strftime(buffer, 80, format, timeinfo);
      return [NSString   stringWithCString:buffer encoding:NSUTF8StringEncoding];
}
    2)如何使用
    在需要转换的文件中,进行如下操作:
       //时间格式

       NSString   *str = @"%d.%m.%Y %H:%M:%S";     
       //其中sts.createdAt为time_t类型,这个数据是来自新浪微博
      NSString    *time = [self dateInFormat:sts.createdAt format:str];     

       NSLog(@"createdAt: %@",time);

控制台输出如下:

createdAt: 05.08.2011 00:17:56



1,NSData  与 NSString
  NSData --> NSString
  NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];
  NSString --> NSData
  NSString *aString = @"1234";
  NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];

2,NSData 与 Byte
  NSData --> Byte
  NSString *testString = @"1234567890";
  NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];
  Byte *testByte = (Byte *)[testData bytes];
  Byte --> NSData
  Byte byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};
  NSData *adata = [[NSData alloc] initWithBytes:byte length:24];

3,NSData 与 UIImage
  NSData --> UIImage
  UIImage *aimage = [UIImage imageWithData: imageData];
  //例:从本地文件沙盒中取图片并转换为NSData
  NSString *path = [[NSBundle mainBundle] bundlePath];
  NSString *name = [NSString stringWithFormat:@"ceshi.png"];
  NSString *finalPath = [path stringByAppendingPathCom ponent:name];
  NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
  UIImage *aimage = [UIImage imageWithData: imageData];
  UIImage-> NSData
  NSData *imageData = UIImagePNGRepresentation (aimae);

4,NSData 与 NSMutableData
  NSData --> MSMutableData
  NSData *data=[[NSData alloc]init];
  NSMutableData *mdata=[[NSMutableData alloc]init];   
  mdata=[NSData dataWithData:data];

5,NSData合并为一个NSMutableData
  1 - (NSString *)filePathWithName:(NSString *)filename
  2 {
                 NSArray *paths = NSSearchPathForDirectori esInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                 NSString *documentsDirectory = [paths objectAtIndex:0];
                 return [documentsDirectory stringByAppendingPathCom ponent:filename];
  6 }
  7
  8 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOp tions:(NSDictionary *)launchOptions {     
         //音频文件路径
10                 NSString *mp3Path1 = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp3"];
11                 NSString *mp3Path2 = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"mp3"];
12                 //音频数据
13                 NSData *sound1Data = [[NSData alloc] initWithContentsOfFile: mp3Path1];
14                 NSData *sound2Data = [[NSData alloc] initWithContentsOfFile: mp3Path2];
15                 //合并音频
16                 NSMutableData *sounds = [NSMutableData alloc];
17                 [sounds appendData:sound1Data];
18                 [sounds appendData:sound2Data];
19                 //保存音频
20
21                 NSLog(@"data length:%d", [sounds length]);
22
23                 [sounds writeToFile:[self filePathWithName:@"tmp.mp3"] atomically:YES];
24               
25                 [window makeKeyAndVisible];
26       
27         return YES;
28 }



总结:

1、当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。
2、NSUInteger是无符号的,即没有负数,NSInteger是有符号的。
3、注意:既然都有了NSInteger等这些基础类型了为什么还要有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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值