简介

进制

二进制数据是用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编码表:

python 二进制数据截取一段 python获取二进制bit位_码表


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,用于程序运行