python基础学习浅学二进制,字符串(bytes,bytearray,string)

一,二进制
二进制中只有两个可能的数:1和0
二进制中,1个1或0叫一’位’(bit)
8位能表示的最小数是0,8位都是0;最大数是255,8位都是1。
十进制逢十进一;二进制逢二进一,记零

1.二进制换十进制:
从右往左:1,2,4,8…分别从右往左对应2的n次方。如2的0次方,2的1次方,2的2次方…
从左往右分别对应相乘再相加即为十进制。

十进制换二进制:
如:25
一直除以2,每次的余数倒序读即此十进制的二进制。

2.二进制里,1kb=2^10=1024个字节
1000也是千字节(kb)的正确单位,1000和1024都对
kb mb gb 分别对应 千字节 兆字节 千兆字节

3.计算机中正数和负数表示方式
0是正,1是负(1开头代表负数,0开头代表正数)。
总共是32位的二进制,其中一位表示正数负数,剩下31位表示数字。
不够用,引入64位使用,第一位表示正负,剩余63位表示数字。

用科学计数法表示十进制,处理非整数。
value=signexponentsighificand
符号位指数值有效位数
举例:114.9可以写成0.1149* 10 ^ 3
。1149叫做有效位数,1代表指数。

在32位浮点数中,第一位表示数字正负。后面八位存指数,剩下23位存有效数字

4.把字符串转换为字节的方法:ASCII,Unicode,UTF-8,gbk(中文编码格式)
ASCII,一个字节,只支持英文。在此基础上做出的Unicode。
Unicode,两个字节(生僻字四个),支持所有语言。在此基础上做出的UTF-8
UTF-8,1到6个字节(英文字母一个字节,汉子三个字节,生僻字4到6个字节),支持所有语言

5.字符集(字符编码,编码字符集,字库表) 字符集只是一个规则集合的名字。
(1)字符编码:是编码字符集和实际存储数值之间的转换关系。
字符:是根据字符编码方案转换为一个二进制数值存储在计算机中的。
字符编码是定义在字符集上的映射规则。(字符—>计算机中的实际存储值)
(2)编码字符集:(如:Unicode,ASCII)用一个编码值code point来表示一个字符(即该字符在字库表中的位置),这个值称为字符对应于编码字符集的序号。
(3)字库表:是一个相当于所有可读或者可显示字符的数据库,字库表决定了整个字符集能够展现表示的所有字符的范围。

二,python中对文本(字符串,即string和Unicode编码)用于显示
和二进制数据(bytes)主要用于存储和传输
做了如下区分:

字节类型区别:python中有 string类型 bytes类型(二进制字符串) bytearray类型 注意:bytearray类 是range 0<=x<256的一个可变序列.

扫描二维码关注公众号,回复: 9236899 查看本文章

对类型的讲解(bytes和bytearray) 字节 和 字节的一种类型组合

bytes是byte是序列,而str是unicode的序列。

(11111)string和bytes之间的转换关系:
温故而知新:
1.编码:encode() 把字符串进行编码,成二进制的数据
2.解码:decode() 把二进制的数据解码成字符串

str类型: bytes类型:
a = u’吴汉’ l = b’zhangxinyi’ # b’‘表示二进制字符串类型(作用:存储图片,音频,电影),序列类型,不可变类型
print(type(a)) print(type(l))
输出为<class’str’> 输出为<class’bytes’>

          (((注意:
           str类型:
           z = u'吴汉'         z = '吴汉' 
           print(z)            print(z)
           两个执行结果都为    吴汉
           print(type(z))      print(type(z))
           运行结果都是class 'str'
           u的作用:编码器中有个默认的对字符串的unicode操作。写不写U一样。即为str类型。)))

str和bytes之间的转换关系: str–>encode()–>bytes–>decode()解码–>str
(即str类型一编码(encode)则变成bytes类型,bytes类型一解码(decode)就变成str类型)

第一种方法: 第二种方法:
z = u’张馨怡是傻逼’
b = z.encode(‘utf-8’) b = bytes(z,encoding=‘utf-8’)#编码过程
print(b)
#‘张馨怡是傻逼’的utf-8编码:(即输出) b’\xe5\xbc\xa0\xe9\xa6\xa8\xe6\x80\xa1\xe6\x98\xaf\xe5\x82\xbb\xe9\x80\xbc’
print(type(b))
#输出: <class ‘bytes’>
new_z = b.decode(‘utf-8’) new_z = str(b,encoding=‘utf-8’)#解码过程
print(new_z)
#还原了,输出为:‘张馨怡是傻逼’
print(type(new_z))
#输出为: <class ‘str’>

(22222)bytearray类型: 范围很广(int,字符串,参数,对象)

注意:bytearray类型是range 0<=x<256的一个可变序列。如果超出255则会报错。
对应的bytes就是二进制字符串的不可变的类型

1.参数是字符串:必须给出编码以及可选的错误参数,然后使用str.encode()将字符串转换为字节
b = bytearray(u’未来的兰草说’, encoding=‘utf-8’) # 参数里面进行编码
编码格式:\xe6\x9c\xaa\xe6\x9d\xa5\xe7
print(b)
print(type(b))

2.参数是int
b = bytearray(23) # 编码格式:\x00的个数 本代码行是23个
print(b)
print(type(b))

3.参数是list 可迭代(相当于循环,可用for去遍历访问)的一个对象
b = bytearray([0,2, 4,5]) 结果:bytearray(b’\x00\x02\r\x04\x05’) #x代表数字,00是两个十六进制数。
print(b)

(33333)bytes和bytearray(二进制数组)的相互转换:

bytes和bytearray的转换:
s = b’wuhan’
b = bytearray(s) 就把bytes类型的wuhan转换成了bytearray
z = bytes(b) 就把bytearray类型转换为了bytes
因为byte和bytearray都是同一类型(字节),所以不用encode以及decode

bytearray和str的转化:
s = ‘wuhan’
b = bytearray(s,encoding=‘utf-8’)
把str类型转换为bytearray类型
z = b.decode(encoding=‘utf-8’) 等价于 c = b.decode(‘utf-8’) 或 c = str(b, encoding=‘utf-8’)
把bytearray类型转换为str类型

发布了14 篇原创文章 · 获赞 15 · 访问量 229

猜你喜欢

转载自blog.csdn.net/qq_44907926/article/details/104308748