iOS NSDictionary、NSData、JSON等 数据类型相互转换

 

1.NSDictionary类型转换为NSData类型:

  1. NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:  
  2.                                 @"balance", @"key",  
  3.                                @"remaining balance", @"label",  
  4.                                 @"45", @"value",  
  5.                                 @"USD", @"currencyCode",nil];  
  6.            
  7. NSMutableData *data = [[NSMutableData alloc] init];  
  8. NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];  
  9. [archiver encodeObject:params forKey:@"Some Key Value"];  
  10. [archiver finishEncoding]; 

2.NSData类型转换为NSDictionary类型:

  1. //NSData -> NSDictionary  
  2. NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];  
  3. NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];  
  4. NSDictionary *myDictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain];  
  5. [unarchiver finishDecoding];  
  6. [unarchiver release];  
  7. [data release]; 

3.NSDictionary类型转换为JSON数据类型:

  1. //NSDictionary -> JSON:  
  2. NSString *jsonStr=[dict JSONRepresentation];

注意JSON与NSDictionary类型的转换一般会用到第三方公开的JSON库,读者可以在网上找到很多。

1. NSData 与 NSString
NSData-> NSString
NSString *aString = [[NSString alloc] initWithData:adata encoding: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;   //// 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_char1 >= 'A' && hex_char1 <='F')
int_ch2 = hex_char2-55; //// A 的Ascll - 65
else
int_ch2 = hex_char2-87; //// a 的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 stringByAppendingPathComponent:name];

NSData *imageData = [NSData dataWithContentsOfFile: finalPath];

UIImage *aimage = [UIImage imageWithData: imageData];

 

UIImage-> NSData

NSData *imageData = UIImagePNGRepresentation(aimae);

 

说法2:

前言:今天发现一些同学 在NSDictionary转NSData竟然抓瞎了,所以就粘出来这个简单的方法!

大家在做网络请求的时间,如NSConnection 把NSData转NSDictionary的事了吧!  这里是一样的Foundation库提供的NSJSONSerialization 的一个方法: dataWithJSONObject:options:error:
如题代码如下:

         NSDictionary *dic = @{@"name":@"macRong",@"webHome":@"eqi.cc"};

    NSData *data =    [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];

    NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainerserror:nil];

   NSLog(@"NSDictionary  NSData = %@",data);

    NSLog(@"NSData  NSDictionary =%@",dictionary);

 

posted on 2016-02-24 23:03  &#127774;Bob  阅读(1051)  评论(0编辑  收藏  举报

导航