ios 中Nsstirng,Nsdata,char,byte,UIImage 之间的转换

来源:互联网 发布:cnc数控编程基础 编辑:程序博客网 时间:2024/06/01 09:35
object-c 继承于c语言,因此最基础的数据之间的转换自然也成为oc 的基础。下面记录一下这些数据之间转换的具体方法。

1.NSData 与 NSString

NSDate->NSString

[plain] view plaincopy
  1. NSString *testString =[[NSString alloc] initWithData:testData encoding:NSUTF8StringEncoding];  


NSString ->NSData

[plain] view plaincopy
  1. NSData *aData =[aString dataUsingEncoding:NSUTF8StringEncoding];  



2.NSData 与char

NSData->char*

[plain] view plaincopy
  1. char *test=(char*)[data bytes];  


char ->byte

[plain] view plaincopy
  1. for (int i=0;i<strlen(test);i++)  
  2.   
  3. printf("%02X",test[i]&0xff);//16进制  


char*->NSData


[plain] view plaincopy
  1. byte *testData =malloc(sizeOf(byte)*16);  
  2.   
  3. NSData *content =[NSData dataWithBytes:tempData length:16];  



3.byte与NSData

NSData->Byte数组

[plain] view plaincopy
  1. NSString *testString = @"1234567890";  
  2. NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];  
  3. Byte *testByte = (Byte*)[testData bytes];  
  4. for(int i=0;i<[testDatalength];i++)  
  5. printf("testByte = %d ",testByte[i]);  



Byte数组-> NSData

[plain] view plaincopy
  1. 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};  
  2. NSData *adata = [[NSData alloc] initWithBytes:byte length:24];  



Byte数组->16进制数
[plain] view plaincopy
  1. Byte *bytes = (Byte *)[aData bytes];  
  2. NSString *hexStr=@"";  
  3. for(int i=0;i<[encryDatalength];i++)  
  4. {  
  5. NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0 xff]; ///16进制数  
  6. if([newHexStr length]==1)  
  7. hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];  
  8. else  
  9. hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];  
  10. }  
  11. NSLog(@"bytes 的16进制数为:%@",hexStr);  



16进制数->Byte数组
[plain] view plaincopy
  1. ///// 将16进制数据转化成Byte 数组  
  2. NSString *hexString = @"3e435fab9c34891f";//16进制字符串  
  3. int j=0;  
  4. Byte bytes[128];   
  5.   
  6.  ///3ds key的Byte数组, 128位  
  7. for(int i=0;i<[hexString length];i++)  
  8. {  
  9. int int_ch;  /// 两位16进制数转化后的10进制数  
  10.    
  11. unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)  
  12. int int_ch1;  
  13. if(hex_char1 >= ""0"" &&hex_char1 <=""9"")  
  14. int_ch1 = (hex_char1-48)*16;   ////0 的Ascll - 48  
  15. else if(hex_char1 >= ""A"" &&hex_char1 <=""F"")  
  16. int_ch1 = (hex_char1-55)*16;//// A 的Ascll - 65  
  17. else  
  18. int_ch1 = (hex_char1-87)*16;//// a 的Ascll - 97  
  19. i++;  
  20.    
  21. unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)  
  22. int int_ch2;  
  23. if(hex_char2 >= ""0"" &&hex_char2 <=""9"")  
  24. int_ch2 = (hex_char2-48);//// 0 的Ascll - 48  
  25. else if(hex_char1 >= ""A"" &&hex_char1 <=""F"")  
  26. int_ch2 = hex_char2-55; //// A 的Ascll - 65  
  27. else  
  28. int_ch2 = hex_char2-87; //// a 的Ascll - 97  
  29.    
  30. int_ch = int_ch1+int_ch2;  
  31. NSLog(@"int_ch=%d",int_ch);  
  32. bytes[j] = int_ch;  ///将转化后的数放入Byte数组里  
  33. j++;  
  34. }  
  35. NSData *newData = [[NSData alloc] initWithBytes:bytes length:128];  
  36. NSLog(@"newData=%@",newData);  



4.NSData    与UIImage

NSData ->UIImage

[plain] view plaincopy
  1. UIImage *testImage =[UIImage imageWithData:testImageData];  


[plain] view plaincopy
  1. //从本地文件沙盒中取并转化为NSData  
  2.   
  3. NSString *path =[[NSBundle mainBundle] bundlePath];  
  4.   
  5. NSString *name =[NSString stringWithFormat:@"testImage.png"];  
  6.   
  7. NSString *finalPath =[path stringByAppendingPathComponent:name];  
  8.   
  9. NSData *imageData =[NSData dataWithContentFile:finalPath];  
  10.   
  11. UIimage *testImage =[UIimage imageWithData:ImageData];  


UIImage->NSData

[plain] view plaincopy
  1. NSData *imageData =UIImagePNGRepresentation(testImage); 
0 0
原创粉丝点击