iOS--算法--Base64篇
2015-04-11 18:24
330 查看
Base64作为各种语言中常用的字符串转码标准,深受程序员的喜爱。
先来介绍一下:Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
在iOS7之前,程序员都需要自己实现Base64编码算法,当然这也并不是一件坏事。下面来看看iOS7是如何实现Base64编码的吧!
先来介绍一下:Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='
为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。
Base64编码表
码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w | |||
1 | B | 17 | R | 33 | h | 49 | x | |||
2 | C | 18 | S | 34 | i | 50 | y | |||
3 | D | 19 | T | 35 | j | 51 | z | |||
4 | E | 20 | U | 36 | k | 52 | 0 | |||
5 | F | 21 | V | 37 | l | 53 | 1 | |||
6 | G | 22 | W | 38 | m | 54 | 2 | |||
7 | H | 23 | X | 39 | n | 55 | 3 | |||
8 | I | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | b | 43 | r | 59 | 7 | |||
12 | M | 28 | c | 44 | s | 60 | 8 | |||
13 | N | 29 | d | 45 | t | 61 | 9 | |||
14 | O | 30 | e | 46 | u | 62 | + | |||
15 | P | 31 | f | 47 | v | 63 | / |
#import <Foundation/Foundation.h> @interface NSString (Base64) //编码 - (NSString *)Base64Encoded; + (NSString *)Base64StringWithStr:(NSString *)aSourceStr; //解码 - (NSString *)base64Decoded; + (NSString *)StringFromBase64Str:(NSString *)aSourceStr; @end
#import "NSString+Base64.h" @implementation NSString (Base64) - (NSString *)Base64Encoded { return [NSString Base64StringWithStr:self]; } + (NSString *)Base64StringWithStr:(NSString *)aSourceStr { NSData * data = [aSourceStr dataUsingEncoding:NSUTF8StringEncoding]; return [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; } - (NSString *)base64Decoded { return [NSString StringFromBase64Str:self]; } + (NSString *)StringFromBase64Str:(NSString *)aSourceStr { NSData *nsdataFromBase64String = [[NSData alloc] initWithBase64EncodedString:aSourceStr options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSString *base64Decoded = [[NSString alloc] initWithData:nsdataFromBase64String encoding:NSUTF8StringEncoding]; return base64Decoded; } @end
相关文章推荐
- ios开发中解决Base SDK missing问题
- ios_base::app方式不受seekp()的影响
- ios_base::sync_with_stdio() 的具体用法
- undefined reference to `std::ios_base::Init::Init() 解决
- IOS 理解iPhone项目的BaseSDK和DeploymentTarget含义
- IOS定位与坐标系算法
- ios下使用SHA1WithRSA算法加签与java后台验签配合demo
- c++ ios_base register_callback方法使用
- undefined reference to `std::ios_base::Init::Init()
- Can not open file with "ios_base::in | ios_base::app"
- ubuntu下 GCC编译程序出现 undefined reference to `std::ios_base::Init::Init()'问题
- iOS开发中Base SDK Missing的两个解决办法
- IOS 4.3.2 windows base创建
- [流解析 vs 2005]ios_base
- ios_base typedef 成员与值的对照表
- std::ios_base::ios_base(const std::ios_base&)' is private 错误
- ubuntu下 GCC编译程序出现 undefined reference to `std::ios_base::Init::Init()'问题
- ios_base::ate和ios_base::app的区别
- ios base64
- IOS 如何在使用Cocos2D中实现A星(A*)寻路算法