一、bytes 字节串类型概述

Python 3 新增了 bytes 类型,用于代表字节串,是一个类型,不是C#中的列表。

由于 bytes 保存的就是原始的字节(二进制格式)数据,因此 bytes 对象可用于在网络上传输数据,也可用于存储各种二进制格式的文件,比如图片、音乐等文件。

1、字节串与字符串之间的区别

bytes 和 str 除操作的数据单元不同之外,它们支持的所有方法都基本相同,bytes 也是不可变序列。

  1. 字符串(str)由多个字符组成,以字符为单位进行操作;
  2. 字节串(bytes)由多个字节组成,以字节为单位进行操作。

2、字节概述

计算机底层有两个基本概念:位(bit)和字节(Byte),其中

  1. bit 代表 1 位,要么是 0,要么是 1;
  2. Byte 代表 1 字节,1 字节包含 8 位。

在字节串中每个数据单元都是字节,也就是 8 位,其中每 4 位(相当于 4 位二进制数,最小值为 0 ,最大值为 15)可以用一个十六进制数来表示,因此每字节需要两个十六进制数表示,

b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b',
# 比如 :\xe6 就表示 1 字节,其中 \x 表示十六进制,e6 就是两位的十六进制数。

Unicode 字符集,包括汉字,为两个字节(16 位,支持 65536 个字符编号)。实际使用的 UTF-8, UTF-16 等其实都属于 Unicode 字符集。

二、字节串与字符串之间的转换

bytes 对象只负责以字节(二进制格式)序列来记录数据,至于这些数据到底表示什么内容,完全由程序决定。如果采用合适的字符集,字符串可以转换成字节串;反过来,字节串也可以恢复成对应的字符串。

1、将一个字符串转换成 bytes 对象

如果希望将一个字符串转换成 bytes 对象,有如下三种方式:

下面程序中 b1~b5 都是字节串对象,该程序示范了以不同方式来构建字节串对象。其中 b2、b3 都是直接在 ASCII 字符串前添加b前缀来得到字节串的:b4 调用 bytes() 函数来构建字节串;而 b5 则调用字符串的 encode 方法来构建字节串。

  1. 如果字符串内容都是 ASCII 字符,则可以通过直接在字符串之前添加 b 来构建字节串值。
  2. # 创建一个空的bytes
    b1 = bytes()
    # 创建一个空的bytes值
    b2 = b''
    # 1、通过b前缀指定hello是bytes类型的值
    b3 = b'hello'
    print(b3)
    print(b3[0])
    print(b3[2:4]) #b'hello'
    #104
    #b'll'
  3. 调用 bytes() 函数(其实是 bytes 的构造方法)将字符串按指定字符集转换成字节串,
    如果不指定字符集,默认使用 UTF-8 字符集。
  4. # 调用bytes方法将字符串转成bytes对象
    b4 = bytes('我爱Python编程',encoding='utf-8')
    print(b4)
    #b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'
  5. 调用字符串本身的encode() 方法将字符串按指定字符集转换成字节串(常用)
    如果不指定字符集,默认使用 UTF-8 字符集。
  6. # 利用字符串的encode()方法编码成bytes,默认使用utf-8字符集
    b5 = "学习Python很有趣".encode('utf-8')
    print(b5)
    #b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'

从上面的输出结果可以看出,字节串和字符串非常相似,只是字节串里的每个数据单元都是 1 字节。

2、decode():将一个bytes 对象转换成字符串

如果程序获得了 bytes 对象,也可调用 bytes 对象的 decode() 方法将其解码成字符串,

#将bytes 对象解码成字符串,默认使用UTF-8进行解码
st = b5.decode('utf-8')
print(st)#学习Python很有趣

Python bytes类型及用法的更多相关文章

  1. 14.Python bytes类型及用法

    Python 3 新增了 bytes 类型,用于代表字节串(这是本教程创造的一个词,用来和字符串对应).字符串(str)由多个字符组成,以字符为单位进行操作:字节串(bytes)由多个字节组成,以字节 ...

  2. python bytes类型

    python3中二进制数据则由bytes类型表示,8位一字节 格式化打印文件的二进制编码 with open('spiderman.mkv', "rb") as f: print( ...

  3. python bytes类型去除尾部字节

    by = b'\x01\x02' print(by) by = by.rstrip() print(by) by = by.rstrip(chr(2).encode()) print(by) b'\x ...

  4. Python 数据类型--Bytes类型

    一.Bytes类型 在Python3以后,字符串和bytes类型彻底分开了.字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的. bytes数据类型在所有的操作和使用甚至内置方法上和字 ...

  5. Python 3中的str和bytes类型

    Python3 中的str和bytes类型 Python3最重要的新特性之一是:对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Pyt ...

  6. Python str 与 bytes 类型(Python2/3 对 str 的处理)

    本文均在 Python 3 下测试通过,python 2.x 会略有不同. 1. str/bytes >> s = '123' >> type(s) str >> ...

  7. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  8. python字典转bytes类型字典

    python字典转bytes类型字典import base64 import json 1. a={"Vod":{"userData":"{}&quo ...

  9. python之路day06--python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码

    python2#print() print'abc'#range() xrange()生成器#raw_input() python3# print('abc')# range()# input() = ...

随机推荐

  1. 【C/C++开发】emplace_back() 和 push_back 的区别

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  2. PatchMatch Stereo - Stereo Matching with Slanted Support Windows

    Tips MVS: Multi-View Stereo Abstract 思路:一般的局部立体方法是一个具有整形数值视察(disparity)的支持镜头进行匹配,其中有一个隐藏的假设:再支持区域的像素 ...

  3. ArcGIS Server浏览地图服务无响应原因分析说明

    1.问题描述 从4月17号下午5时起,至18号晚9点,客户单位部分通过ArcGIS Server发布的地图服务(该部分地图服务的数据源为数据库SJZX)无法加载浏览,表现为长时间无响应.同时,通过Ar ...

  4. C运算符优先级和结合性

    C中运算符优先级和结合性一览表: 在上表中能总结出一下规律: (1)结合方向只有三个是从右往左,其余都是从左往右: (2)逗号运算符的优先级最低: (3)对于优先级,有一个普遍规律:算术运算符 > ...

  5. 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)

    一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...

  6. SQL系列(四)—— 唯一值(distinct)

    有时需要查询某列上的不重复的数据,如: SELECT name FROM student; 结果: name lxy lxy lxy lxy 这样的结果显然不符合我们的需求.如何对列数据进行去重,查询 ...

  7. N(C)O(S)I(P)P 2019 退役记

    N(C)O(S)I(P)P 2019 退役记 day-4 今天下午老师突然咕了,于是一下午欢乐时光 今天上午考试T3线段树维护个区间加,区间乘 一遍过编译,一遍过样例(第一次,俺比较弱(虽然也发现和暴 ...

  8. Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

    Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...

  9. maven下载,上传设置

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3. ...

  10. English--consonant_摩擦音

    consonant_摩擦音_[f]和[v].[s]和[z].[∫]和[ʒ] 摩擦音:理论上可以无限延长气流. [f]:噘嘴,上牙咬住下唇,送气,通过气流摩擦发音,声带不震动.knife.food.le ...