简介
进制
二进制数据是用0和1两个数码来标识的数。他的基数是2,进位规则是“逢二进一”,借位规则是“借一当二”(参考十进制的”逢十进一“,”借一当十“)
计算机中(内存、硬盘)存储的数据均为二进制。当前计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制是一个非常微小的开关,用”开“表示1,”关“表示0
各类进制介绍
进制 | 前缀 | 描述/特点 |
二进制 | 0b | 逢二进一,借一当二 |
十进制 | None | 逢十进一,借一当十 |
八进制 | 0 | 逢八进一,借一当八 |
十六进制 | 0x | 逢十六进一,借一当十六 |
不同进制在python中的转换方法
pass
单位换算 之 比特&&字节
比特
二进制:1010101010001011101
比特(bit):二进制的每一位称之为1bit,也就是1位即1比特
字节
字节(byte):定义8比特即为1字节
为何定义8位为1字节:
当初将英语字母及各个特殊符号做了编码表(ascii码),刚好有255个,而二进制8位即刚好有255个,即8位可随意表示任何一个字符,因此定义8位为1字节;
因此计算机认为的一个字最小为1个字节,即在计算机中最小单位为1个字节
单位 | 换算 |
Bit | 8Bit = 1Byte |
Byte | 1024Byte = 1KB |
KB | 1024KB = 1MB |
MB | 1024MB = 1GB |
GB | 1024GB = 1TB |
编码
各类编码介绍
ASCII编码表:
ascii
最初的满足英文的编码表,共255种可能,因此一个字母用8位表示,即1字节(上图即acsii码表)
gb2312
早期针对中文的编码表
gbk
目前针对中文的编码表
unicode
万国码,即全球文字均收录到该编码表中,跨国文字均能找到对应的码,因此,使用该码,就不会再出现乱码(4个字节(即32位)代表一个字母/文字/符号),由于恒定的4个字节表示,因此可能会比较浪费空间,如用4个字节存储一个英文字母
utf-8
可变长的编码方式,会用不同长度表示一个字符
英文字母 8bit/位 1byte/字节
欧洲字母 16bit/位 2byte/字节
中国文字 24bit/位 3byte/字节
各类编码的使用场景
unicode
用在程序的内存中,只要程序运行加载到内存的数据都以unicode的编码形式运行、操作
程序运行起来之后,不会使用大量字符串,且,内存会有自动清理的机制,因此即便unicode使用4字节代表一个字符也不是影响很大
utf-8
当存在文件中,或者再网络中传输时,就会把unicode转换成utf-8
因为会有大量数据存储在硬盘或者在网络传输,utf-8即避免了乱码又避免了资源浪费
各类编码在python中的转换方法
- unicode转utf-8
s1 = '你好'
s2 = s1.encode('utf-8')
print(s2)
# 返回值:b'\xe4\xbd\xa0\xe5\xa5\xbd'
'''
1) b''代表“字节”数据类型,即byte,即转为了byte类型;
2) "\x"代表十六进制,由于二进制显示原因,所以以十六进制显示
3) 根据代码看,转为utf-8,因此3个字节代表一个汉字,从返回值看,有6个字节分别代表‘你好’两个字
'''
编码用途/转成字节数据类型的用途/目的:
1)往文件里写
2)往网络中传输
- utf-8转unicode
s1 = '你好哈哈'
s2 = s1.encode('utf-8')
print(s2) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x93\x88\xe5\x93\x88'
print('-'*30)
s = s2.decode('utf-8')
print(s) # 你好哈哈
解码用途/目的:
1)从文件里读出来,需要在程序里运行
2)从网络接收到,需要在程序里运行
总结
编码:会将内存中的数据转为byte数据类型,用于在网络中传输或者在文件/硬盘中存储
解码:会将网络接收到的数据或者文件/硬盘读取到的数据转为unicode,用于程序运行