1.NSData和NSString的转换:
- (void)viewDidLoad { [super viewDidLoad]; // 字符串 NSString *str = @"1111111111"; NSLog(@"str = %@",str); // NString -> NSData NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; NSLog(@"Data = %@",data); // NSData -> NString NSString *dataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"dataStr = %@",dataStr); }
2.图片和字符串的转换:
//图片转字符串 -(NSString *)UIImageToBase64Str:(UIImage *) image { NSData *data = UIImageJPEGRepresentation(image, 1.0f); NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; return encodedImageStr; } //字符串转图片 -(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr { NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:_encodedImageStr]; UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData]; return _decodedImage; }
3.有解决NSData转NSString为nil的解决方法,是使用了一个扩展,不过,我总之是没有成功的,还是nil,难道是对图片压缩转Data了?
这里有知道的大神可以告诉我哟!!特别感谢了!!
扩展如以下所示:
// // NSData+UTF8.m // zichan // // Created by 思 彭 on 16/11/9. // Copyright © 2016年 Mike. All rights reserved. // #import "NSData+UTF8.h" @implementation NSData (UTF8) - (NSData *)UTF8Data { //保存结果 NSMutableData *resData = [[NSMutableData alloc] initWithCapacity:self.length]; //无效编码替代符号(常见 � □ ?) NSData *replacement = [@"�" dataUsingEncoding:NSUTF8StringEncoding]; uint64_t index = 0; const uint8_t *bytes = self.bytes; while (index < self.length) { uint8_t len = 0; uint8_t header = bytes[index]; //单字节 if ((header&0x80) == 0) { len = 1; } //2字节(并且不能为C0,C1) else if ((header&0xE0) == 0xC0) { if (header != 0xC0 && header != 0xC1) { len = 2; } } //3字节 else if((header&0xF0) == 0xE0) { len = 3; } //4字节(并且不能为F5,F6,F7) else if ((header&0xF8) == 0xF0) { if (header != 0xF5 && header != 0xF6 && header != 0xF7) { len = 4; } } //无法识别 if (len == 0) { [resData appendData:replacement]; index++; continue; } //检测有效的数据长度(后面还有多少个10xxxxxx这样的字节) uint8_t validLen = 1; while (validLen < len && index+validLen < self.length) { if ((bytes[index+validLen] & 0xC0) != 0x80) break; validLen++; } //有效字节等于编码要求的字节数表示合法,否则不合法 if (validLen == len) { [resData appendBytes:bytes+index length:len]; }else { [resData appendData:replacement]; } //移动下标 index += validLen; } return resData; } @end