zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    dubbo
    Executer invokeAll
    java并发编程实战 java并发编程的艺术 阅读随笔
    小程序如何获取指定类名高度
    一些好用的Swift三方框架
    微信小程序checkbox多选传多个参数的操作
    关于xcode出现An unknown error occurred. See the install log for more details安装失败解决办法
    iOS 针对于13.0和暗黑模式出现的适配问题
    iOS UITextField如何禁止输入表情及特殊字符
    判断iPhoneX适配问题
  • 原文地址:https://www.cnblogs.com/pengsi/p/6046675.html
Copyright © 2011-2022 走看看