美文网首页
iOS 7.0后的Base64全解

iOS 7.0后的Base64全解

作者: 山水域 | 来源:发表于2017-07-28 15:55 被阅读824次

项目中的Base64

在iOS 项目中经常会使用到Base64转解码,尤其在URL请求、图片转码上传等方面使用频繁。

NSData 转码 Base 64 方法

@interface NSData (NSDataBase64Encoding)

//处理字符串
- (nullable instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options NS_AVAILABLE(10_9, 7_0);

- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);

//处理UTF-8编码数据
- (nullable instancetype)initWithBase64EncodedData:(NSData *)base64Data options:(NSDataBase64DecodingOptions)options NS_AVAILABLE(10_9, 7_0);

- (NSData *)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);

@end

Base 64 编码选择枚举

/****************        Base 64 Options    ****************/

typedef NS_OPTIONS(NSUInteger, NSDataBase64EncodingOptions) {

//其作用是将生成的Base64字符串按照64个字符长度进行等分换行。
    NSDataBase64Encoding64CharacterLineLength = 1UL << 0, 

//其作用是将生成的Base64字符串按照76个字符长度进行等分换行。
    NSDataBase64Encoding76CharacterLineLength = 1UL << 1,

//其作用是将生成的Base64字符串以回车结束。  
    NSDataBase64EncodingEndLineWithCarriageReturn = 1UL << 4,

//其作用是将生成的Base64字符串以换行结束。
    NSDataBase64EncodingEndLineWithLineFeed = 1UL << 5,

} NS_ENUM_AVAILABLE(10_9, 7_0);

iOS 7 之后弃用的方法及替代方法

base64Encoding 这个简单的转码方式被弃用

- (nullable id)initWithBase64Encoding:(NSString *)base64String NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);
- (NSString *)base64Encoding NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);

base64Encoding的替代方法

- (NSData *)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options 
#warning 选择的枚举类型
NSDataBase64EncodingEndLineWithLineFeed//其作用是将生成的Base64字符串以换行结束。
#pragma mark --例子--
NSString *encodedString =[`NSData实例` base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

Base 64更深入理解

上面的内容仅仅停留在可用可编程的程度,这里我们要更进一步,更深入的了解Base 64 的编解码形式,做到 知其然亦知其所以然

Base64编码

Base64是一种用64个字符来表示任意二进制数据的方法。对于非二进制数据,是先将其转换成二进制形式,然后每连续6Bit(2的6次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。

8位到16位

Base-64编码将一个8位子节序列拆散为6位的片段,并为每个6位的片短分配一个字符,这个字符是Base-64字母表中的64个字符之一。这64个输出字符都是很常见的,可以安全地放在HTTP首部字段中。这64个字符中包括大小写字母数字,还是用里特殊字符

Base64编码表

注意:由于base64编码用了8位字符来表示信息中的6个位,所以base64编码字符串大约比原始值扩大了33%。

下面是一个简单的base64编码实例。在这里,三个字符组成的输入值“Man”是base64编码的,得到的是4个字符的base64编码值“TWFu”。它是按以下方式工作的。

Man转Base64示例

相关文章

网友评论

      本文标题:iOS 7.0后的Base64全解

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