项目中的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编码用了8位字符来表示信息中的6个位,所以base64编码字符串大约比原始值扩大了33%。
下面是一个简单的base64编码实例。在这里,三个字符组成的输入值“Man”是base64编码的,得到的是4个字符的base64编码值“TWFu”。它是按以下方式工作的。
Man转Base64示例
网友评论