bytes数据类型
Posted fan-1994716
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bytes数据类型相关的知识,希望对你有一定的参考价值。
Python3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区别。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事。
字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。
bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。可以通过调用bytes()生成bytes实例,其值形式为 b‘xxxxx‘,其中 ‘xxxxx‘ 为一至多个转义的十六进制字符串(单个 x 的形式为:x12
,其中x为小写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码方式生成bytes对象,就会形成不同的值.
不管怎样,字符串和字节包之间的界线是必然的的,下面的图解非常重要,务必要牢记于心:
b = b‘‘ # 创建一个空的bytes
b = byte() # 创建一个空的bytes
b = b‘hello‘ # 直接指定这个hello是bytes类型
b = bytes(‘string‘,encoding=‘编码类型‘) #利用内置bytes方法,将字符串转换为指定编码的bytes
b = str.encode(‘编码类型‘) # 利用字符串的encode方法编码成bytes,默认为utf-8类型
bytes.decode(‘编码类型‘):将bytes对象解码成字符串,默认使用utf-8进行解码。
对于bytes,我们只要知道在Python3中某些场合下强制使用,以及它和字符串类型之间的互相转换,其它的基本照抄字符串。
简单的省事模式:
string = b‘xxxxxx‘.decode()
直接以默认的utf-8编码解码bytes成string
b = string.encode()
直接以默认的utf-8编码string为bytes
计算机内存地址和为什么用16进制?
为什么用16进制
1、计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)
2、最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
3、计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
4、为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算
16进制用在哪里
1、网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。
2、数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式
3、一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。
以上是关于bytes数据类型的主要内容,如果未能解决你的问题,请参考以下文章
golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出
智能合约实战 solidity 语法学习 03 [ 数据类型 bool uint address bytes enum mapping struct string ] 附代码