功能-使用Base64编解码

作者: 才寒 | 来源:发表于2016-07-21 16:33 被阅读4425次

    iOS之后,NSData新增一个类别用于编解码NSData。

    @interface NSData (NSDataBase64Encoding)
    
    /* Create an NSData from a Base-64 encoded NSString using the given options. By default, returns nil when the input is not recognized as valid Base-64.
    */
    - (nullable instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options NS_AVAILABLE(10_9, 7_0);
    
    /* Create a Base-64 encoded NSString from the receiver's contents using the given options.
    */
    - (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);
    
    /* Create an NSData from a Base-64, UTF-8 encoded NSData. By default, returns nil when the input is not recognized as valid Base-64.
    */
    - (nullable instancetype)initWithBase64EncodedData:(NSData *)base64Data options:(NSDataBase64DecodingOptions)options NS_AVAILABLE(10_9, 7_0);
    
    /* Create a Base-64, UTF-8 encoded NSData from the receiver's contents using the given options.
    */
    - (NSData *)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);
    
    @end
    

    编解码NSString:

        // 字符串转Data
        NSString *str = @"encode string";
        
        // 字符串转成Data
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];// 13 bytes
        
        // 编码Data
        NSData *encodeData = [data base64EncodedDataWithOptions:0];// 20 bytes
        
        // 解码Data
        NSData *decodeData = [[NSData alloc] initWithBase64EncodedData:encodeData options:0];// 13 bytes
        
        // Data转字符串
        NSString *decodeStr = [[NSString alloc] initWithData:decodeData encoding:NSUTF8StringEncoding];
        
        NSLog(@"%@",decodeStr);// encode string
    

    以上的方法是通用方法,不过考虑到开发者使用NSData编解码NSString比较多,苹果提供了更直接的API编解码NSString:

        // 字符串转Data并且编码
        NSData *data = [[NSData alloc] initWithBase64EncodedString:@"encode string" options:0];
        
        // Data解码并且转字符串
        NSString *decodeStr = [data base64EncodedStringWithOptions:0];
        
        NSLog(@"%@",decodeStr);// encode string
    

    编解码UIImage:

        UIImage *img = [UIImage imageNamed:@"image.jpg"];
        
        // 图片转Data
        NSData *data = UIImageJPEGRepresentation(img, 0.7);
        
        // 编码Data
        NSData *encodeData = [data base64EncodedDataWithOptions:0];
        
        // 解码Data
        NSData *decodeData = [[NSData alloc] initWithBase64EncodedData:encodeData options:0];
        
        // Data转图片
        UIImage *decodeImg = [UIImage imageWithData:decodeData];
    

    总结:
    编解码是只有NSData才能穿上脱下的隐身斗篷。

    相关文章

      网友评论

      • 伊织随意写:// 字符串转Data并且编码
        NSData *data = [[NSData alloc] initWithBase64EncodedString:@"encode string" options:0];|

        这样获取到的data好像是空
      • 秋雨无痕:base64是一种编码,算不上加解密,看命名就可以了。encodeing decoding
        才寒:谢谢,当时刚好业务上用这个来实现编解码了,是我混淆了,文章我统一修改了
      • 今天的风儿略喧嚣啊:1.NSString *decodeStr = [data base64EncodedStringWithOptions:0]; 还是命名成:encodedStr比较合适
        2.NSLog(@"%@",decodeStr);// encode string 输出null 我判断是因为NSData *data = [[NSData alloc] initWithBase64EncodedString:@"encode string" options:0]; 传入的应该是base64EncodedString
        才寒:统一回复一下,[data base64EncodedStringWithOptions:0]是把编码成data的数据解码并转回string类型返回出来,我的理解是base64Encoded是修饰String这个词的(注意encode是encoded),简化理解这个方法就是stringWithOptions:,还有输出应该是encode string而不是null吧,我记得当时是从demo拷贝出来的,不过你确定是null的话回复我一下,我另外再尝试一次,之前的demo我弄丢了,最近都在弄qt,没怎么写iOS

      本文标题:功能-使用Base64编解码

      本文链接:https://www.haomeiwen.com/subject/brpbjttx.html