iOS类型的转换

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

 

转载于:https://www.cnblogs.com/pengsi/p/6046675.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值