一、二进制
1、什么是二进制
以2为基数代表系统的二进位制。用两个不同的符号0(代表零)和1(代表一)来表示
2、计算机为什么采用二进制?
1、二进位计数制仅用两个数码,任何具有二个不同稳定状态的元件都可用来表示数的某一位,氖灯的"亮"和"熄";开关的”开“和”关“; 电压的”高“和”低“。
2、二进位计数制的四则运算规则十分简单
3、在电子计算机中采用二进制表示数可以节省设备
二、ASCII码
1、什么是ASCII码
既然电脑只能用0、1来显示,显然我们是看不懂的,怎么能让计算机传输出二进制数据显示出我们能看的字符呢?
所以早期美国就搞了一套电脑编码系统,就是ASCII码。共收录了 字符包括数字、字母、还有一些符号等128个,用一个字节(8位)就可以来表示存储。

ASCII码对照表完整版
比如用我们想别人打个招呼,Hi,在电脑传输的就是01001000 01101001,经过电脑的各种转换,就可显示出Hi。
当欧洲其他的国家,比如法国、德国也用电脑的时候,这些字符就不够用了,就对ASCII码进行了扩展,但是当电脑传到我国的时候,这些字符也没法显示汉字,就根据我们国家的情况制定了国标GB2312、GBK标准,这些标准增加了汉字等字符。
二、Unicode
1、什么是Unicode
如果每个国家都搞一套标准,那岂不是很乱,所以某一个组织就搞了一个同一的标准,就是Unicode。包含了字符集和编码规则。
三、UTF-8
1、什么是UTF-8
Unicode是UTF-8发展来的,当然这其中经历了很复杂的发展历程,这也是目前世界用的最多的。
2、在iOS中的应用
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
将网络请求返回的二进制数据NSData进行NSUTF8StringEncoding编码,转换成我们可以看的懂得文字。
四、base64编码
1、什么是base64编码
Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。
2、为什么要用base64编码
是为了准确的传输数据
浏览器里面的图片、视频、音频都是二进制数据),问题是传输的时候必须保证字节不会改变。你直接将图片的字节转化为一个字符串一般是不行的,除非使用的字符集在0~255之间全部有对应的字符,否则就会导致某些字节转换错误,那么客户端所收到的就不再是原来的那些字节了。
base64之所以可以,是因为编码之后的字符都落在ASCII区间,而ASCII是所有字符编码都会支持的,因此可以正确传输和还原。
3、base64编码原理
比如对ABC进行base64编码:
1、首先取ABC对应的ASCII码值
A : 65、B : 66、C : 67
2、再取二进制值
A : 01000001、B : 01000010、C : 01000011
3、然后把这三个字节的二进制码接起来
010000010100001001000011
再以6位为单位分成4个数据块
010000 010100 001001 000011
并在最高位填充两个0后形成4个字节的编码后的值
00010000 00010100 00001001 00000011
4、再把这4个字节数据转化成10进制数
16、20、19、3
5、最后根据Base64给出的64个基本字符表,查出对应的ASCII码字符
Q、U、J、D
所以ABC进行base64编码后的值是QUJD。
站长工具
用工具测试结果:

- 解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。
4、在iOS的实现
#pragma mark - 1、base64编码
-(void)base64Test{
NSString *str = @"我是中国人";
NSLog(@"原字符=%@",str);
NSLog(@"base64编码=%@",[self base64BianMa:str]);
NSLog(@"base64解码=%@",[self base64JieMa:[self base64BianMa:str]]);
}
-(NSString *)base64BianMa:(NSString *)str{
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Str = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return base64Str;
}
-(NSString *)base64JieMa:(NSString *)str{
NSData *data = [[NSData alloc]initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSString *jiemaStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return jiemaStr;
}
参考:
百度百科:二进制
非常详细的字符编码讲解,ASCII、GB2312、GBK、Unicode、UTF-8等知识点都有
Base64编码
网友评论