预备知识:

bin():

"""

Return the binary representation of an integer.

>>> bin(2796202)

'0b1010101010101010101010'

"""

pass

ord():

""" Return the Unicode code point for a one-character string. """

bytes类

"""

bytes(iterable_of_ints) -> bytes

bytes(string, encoding[, errors]) -> bytes

bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer

bytes(int) -> bytes object of size given by the parameter initialized with null bytes

bytes() -> empty bytes object

Construct an immutable array of bytes from:

- an iterable yielding integers in range(256)

- a text string encoded using the specified encoding

- any object implementing the buffer API.

- an integer

"""

python3中,字符串是unicode格式,字节包括utf-8,gbk等等,网络传输,硬盘保存是以字节格式保存的。

str和bytes格式的区别:

str:

表现形式:a='hello,world'

内部原理:00000000 00000000 00000000 01101000 ‘h’

。。。

。。。

bytes:

表现形式:a=b'hello,world'

内部原理:

01101000 utf-8

。。。

。。。

00000000 01101000 gbk

。。。

。。。

Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象。

Bytes 对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。我们可以通过调用 bytes() 类(没错,它是类,不是函数)生成 bytes 实例,其值形式为 b'xxxxx',其中 'xxxxx' 为一至多个转义的十六进制字符串(单个 x 的形式为:\xHH,其中 \x 为小写的十六进制转义字符,HH 为二位十六进制数)组成的序列,每两个十六进制数即每个‘x’代表一个字节(八位二进制数,取值范围 0-255),对于同一个字符串如果采用不同的编码方式生成 bytes 对象,就会形成不同的值。

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然 )。

例如:

a='你好'

a_b=a.encode('utf-8')

print(a_b)

for i in a_b:

print(i)

for i in a_b:

print(bin(i))

输出:

b'\xe4\xbd\xa0\xe5\xa5\xbd' #原来如此,\xe4 长得这么丑,实际是十六进制的数字。和128,12,没什么本质的区别。自然就可以bin()变为二进制数字了。

228

189

160

229

165

189

0b11100100

0b10111101

0b10100000

0b11100101

0b10100101

0b10111101

回到bytes和str的身上。bytes是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。因为编码方式的不同,对这个比特流的解读也会不同,对实际使用造成了很大的困扰。下面让我们看看Python是如何处理这一系列编码问题的:

>>> s = "中文"

>>> s

'中文'

>>> type(s)

>>> b = bytes(s, encoding='utf-8')

>>>b

b'\xe4\xb8\xad\xe6\x96\x87'

>>> type(b)

从例子可以看出,s是个字符串类型。Python有个内置函数bytes()可以将字符串str类型转换成bytes类型,b实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'这种形式,开头的b表示这是一个bytes类型。\xe4是十六进制的表示方式,它占用1个字节的长度,因此”中文“被编码成utf-8后,我们可以数得出一共用了6个字节,每个汉字占用3个,这印证了上面的论述。在使用内置函数bytes()的时候,必须明确encoding的参数,不可省略。

我们都知道,字符串类str里有一个encode()方法,它是从字符串向比特流的编码过程。而bytes类型恰好有个decode()方法,它是从比特流向字符串解码的过程。除此之外,我们查看Python源码会发现bytes和str拥有几乎一模一样的方法列表,最大的区别就是encode和decode。

从实质上来说,字符串在磁盘上的保存形式也是01的组合,也需要编码解码。

如果,上面的阐述还不能让你搞清楚两者的区别,那么记住下面两几句话:

在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。

使用bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。

Python已经严格区分了bytes和str两种数据类型,你不能在需要bytes类型参数的时候使用str参数,反之亦然。这点在读写磁盘文件时容易碰到。

python数据类型所占字节数_python标准数据类型 Bytes相关推荐

  1. C语言各数据类型所占字节数和取值范围

    C语言中各数据类型所占字节数和取值范围 注:每种数据类型的取值范围都是与编译器相关的,以下为数据Visual C++32位环境下的参数,如想清楚了解自己所用编译器对各数据类型所占字节,可以用sizeo ...

  2. java 基本数据类型所占字节数及其范围

    java学习笔记:java 基本数据类型所占字节数及其范围 所占字节数 类型范围 浮点数可表示的范围非常大,float类型可最大表示3.4 x 10^38 ,而double类型可最大表示1.79 x ...

  3. python int占用多少字节数_python中int类型占了多少个字节

    python中int类型占了多少个字节 发布时间:2020-11-20 14:04:35 来源:亿速云 阅读:73 作者:小新 小编给大家分享一下python中int类型占了多少个字节,相信大部分人都 ...

  4. C/C++基本数据类型所占字节数

    关于这个主要的问题,非常早曾经就非常清楚了,C标准中并没有详细给出规定那个基本类型应该是多少字节数,并且这个也与机器.OS.编译器有关,比方相同是在32bits的操作系统系,VC++的编译器下int类 ...

  5. JAVA基本数据类型所占字节数是多少?

    byte     1字节                short    2字节                int      4字节                long     8字节     ...

  6. java 字符类型 字节数_JAVA基本数据类型所占字节数是多少?

    byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 doub ...

  7. c语言中布尔类型占几个字节,JAVA基本数据类型所占字节数是多少?

    byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 doub ...

  8. 常见基本数据类型所占字节数

    指针大小与系统编译器位数相同,16位编译器(2字节).32位编译器(4字节).64位编译器(8字节) 编码与中文: Unicode/GBK: 中文2字节 UTF-8: 中文通常3字节,在拓展B区之后的 ...

  9. java 基本数据类型所占字节数

    一.java  基本数据类型 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 整 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...

最新文章

  1. leetcode day4
  2. Buffer和Cache的区别
  3. YunTable 0.1版正式发布!!!(转载)
  4. 如何在JSP里使用Java bean
  5. 神奇的 Object.defineProperty 解释说明
  6. pycharm打包.py程序为可执行文件exe
  7. 在windows下的cmd中如何进入与退出mysql
  8. 蓝桥杯入门训练圆的面积c语言,蓝桥杯-入门训练-圆的面积
  9. Android 虚拟机与真机调试配置
  10. iOS中网络请求的使用(GET请求与POST请求)
  11. Bailian3237 鸡兔同笼【入门】
  12. imx 290 支持25fps
  13. # Idea,2.5,软件安装,提示If you already have a 64-bit JDK installed ,defined a JAVA_HOME variable in Compu
  14. 【无标题】体验scratch海底世界
  15. 打开计算机桌面上没有跑哪里去了,Win8.1我的电脑图标跑哪去了怎么放桌面
  16. JavaScript 发明者布兰登·艾克成为 Mozilla CEO
  17. [渝粤教育] 南京大学 建筑设备 参考 资料
  18. ActiveMQ 完整教程
  19. 【Resnet】Resnet代码详解(图+代码)
  20. 如何删除卸载苹果mac电脑应用软件没有残留垃圾

热门文章

  1. ai电磁组属于什么组_RPA+AI 创新案例挑战赛 2020 【专业组】amp;【校园组】优胜名单来也!...
  2. 思考产品架构的4个视角:业务、场景、数据/功能、实现
  3. linux文件权限umask,linux系统中UMASK权限的用法讲解
  4. cpu序列号唯一吗_怎么看电脑硬件是不是新的 有什么软件能检测吗?
  5. ios 查询mysql数据库操作系统_iOS数据库FMDB--增删改查(模糊查询)详细介绍
  6. sessionStorage和localStorage的用法,不同点和相同点
  7. 【JS】使用变量作为object的key-方法汇总
  8. Myeclipse debug时出现跳行问题的解决
  9. 如何把网址配置为http和https可以同时访问
  10. idea创建git分支