bytes 是 python3.x 之后出现的新数据类型。

  一、bytes与str之间可以互相转换,需要指明使用的编码方式。如下:

#str转bytes
name = str('lucy')  
nameBytes = bytes(name,encoding='utf-8')    
print(nameBytes)    #显示: b'lucy'
print(type(nameBytes))  #显示: <class 'bytes'>
#bytes转str
nameStr = str(nameBytes,encoding='utf-8')   
print(nameStr)      #显示: lucy
print(type(nameStr))    #显示:  <class 'str'>
View Code
name = str('露西')
nameBytes = bytes(name,encoding='utf-8')
print(nameBytes)    #显示: b'\xe9\x9c\xb2\xe8\xa5\xbf'
print(type(nameBytes))  #显示: <class 'bytes'>
#bytes转str
nameStr = str(nameBytes,encoding='utf-8')
print(nameStr)      #显示:露西
print(type(nameStr))    #显示:  <class 'str'>
View Code

  二、utf-8编码中,字母和数字各占一个字节,通过bytes转换后,可以直接与各进制互相转换。

name = str('lucy')
nameBytes = bytes(name,encoding='utf-8')    #转成bytes,每个字母占一个字节
print(nameBytes)         #显示:b'lucy'
for i in nameBytes:      #for 循环i每次取一个字符:一个字节
    print(i,hex(i),bin(i))
'''
108 0x6c 0b1101100
117 0x75 0b1110101
99 0x63 0b1100011
121 0x79 0b1111001
'''
View Code

      utf-8编码中,一个汉字占三个字节,通过bytes转换后,各进制间可以互相转换。 

name = str('露西')
for i in name:      #for 循环i每次取一个字符:一个汉字
    print(i)
nameBytes = bytes(name,encoding='utf-8') #转换成bytes,utf-8每个汉字占3字节
print(nameBytes)    #显示:b'\xe9\x9c\xb2\xe8\xa5\xbf' ,默认十六进制表示。
for i in nameBytes:  #for循环默认十进制表示
    print(i,hex(i),bin(i))
'''
233 0xe9 0b11101001
156 0x9c 0b10011100
178 0xb2 0b10110010
232 0xe8 0b11101000
165 0xa5 0b10100101
191 0xbf 0b10111111
'''
View Code

   三、GBK编码中,字母和数字各占一个字节,通过bytes转换后,可以直接与各进制互相转换。结果与utf-8相同。

name = str('lucy')
nameBytes = bytes(name,encoding='GBK')    #转成bytes,每个字母占一个字节
print(nameBytes)        #显示:b'lucy'
for i in nameBytes:      #for 循环i每次取一个字符:一个字节
    print(i,hex(i),bin(i))
'''
108 0x6c 0b1101100
117 0x75 0b1110101
99 0x63 0b1100011
121 0x79 0b1111001
'''
View Code

      GBK编码中,一个汉字占两个字节,通过bytes转换后,各进制间可以互相转换。结果与utf-8不同。  

name = str('露西')
for i in name:      #for 循环i每次取一个字符:一个汉字
    print(i)
nameBytes = bytes(name,encoding='GBK') #转换成bytes,GBK每个汉字占2字节
print(nameBytes)    #显示:b'\xc2\xb6\xce\xf7' ,默认十六进制表示。
for i in nameBytes:  #for循环默认十进制表示
    print(i,hex(i),bin(i))
'''
194 0xc2 0b11000010
182 0xb6 0b10110110
206 0xce 0b11001110
247 0xf7 0b11110111
'''
View Code

      注意:str类型的中文,经过bytes转换后,如果print直接打印,默认输出十六进制;通过for循环打印,默认输出十进制。