中途回顾,bytes数据类型是什么,和字符串什么关系

author author     2022-09-10     694

关键词:

参考:https://segmentfault.com/a/1190000004450876

 

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

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

技术分享

比如上例中的 a 字符串对象,其十进制 unicode 值为 24464,分别使用 ‘utf-8‘ 和 ‘gb2312‘ 两种编码格式将其转换成 bytes 对象 b 和 c ,结果 b 和 c 的值是完全不同的,由于基于的编码格式不一致, b c 长度甚至都不相同,前者有 3 个字节长度,后者有 2 个字节长度:

技术分享

另外,对于 ASCII 字符串,可以直接使用 b‘xxxx‘ 赋值创建 bytes 实例,但对于非 ASCII 编码的字符则不能通过这种方式创建 bytes 实例:

技术分享

由于 bytes 是序列,因此我们可以通过索引或切片访问它的元素:

技术分享

可以发现如果以单个索引的形式访问元素,其会直接返回单个字节的十进制整数,而以序列片段的形式访问时,则返回相应的十六进制字符序列。

对于 bytes 实例,如果需要还原成相应的字符串,则需要借助内置的解码函数 decode(),借助相应的编码格式解码为正常字符串对象,如果采用错误的编码格式解码,则有可能发生错误:

技术分享

byte为什么要与0xff

...补1。二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关... 查看详情

char和unsignedchar--数据类型区别(代码片段)

char和unsignedchar--数据类型区别 除去布尔型和扩展的字符型之外,其它整型可以划分为带符号的(signed)和无符号的(unsigned)两种。类型int、short、long和longlong都是带符号的,通过在这些类型名前添加unsigned就可以得到无符号... 查看详情

什么是字节

什么是字节位(bit):是计算机内部数据存储最小的单位,11001100是一个八位的二进制数据字节(byte):是计算机中数据处理的基本单位,习惯用B来表示;1B(byte,字节)=8bit(位)1k=1024B字符:是指计算机中使用的字母、数字... 查看详情

数据湖:iceberg概念及回顾什么是数据湖

Iceberg概念及回顾什么是数据湖一、回顾什么是数据湖数据湖是一个集中式的存储库,允许你以任意规模存储多个来源、所有结构化和非结构化数据,可以按照原样存储数据,无需对数据进行结构化处理,并运行不同类型的分析... 查看详情

delphi中byte类型和char类型区别?

...了。可以表示的数据范围是0到255之间。如果确定处理的字符串是标准的ANSI字符串,那不必转换也可以直接一个字节一个字节地处理。如果要处理的字符串不定或是统一的Unicode字符串则要进行转换后进行处理。参考技术A这里的B... 查看详情

python文件处理里encoding和encode有事区别,bytes类型是啥意思?

python问题我来回答你。首先你要知道的是,字符串在Python内部的表示是unicode(统一码、万国码)编码,很多编程语言都是这么设计的,各个国家通用编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码... 查看详情

常用模块

...:你写的py文件 二、序列化模块序列:列表,元组,字符串,bytes什么叫序列化:把一个数据类型转换成字符串、bytes类型的过程就是序列化为什么要把一个数据类型序列化?‘name‘:‘路飞‘,‘sex‘:‘ma 查看详情

java核心技术i---java回顾

一:基础类型运算大部分的指令都没有支持byte、char、short,没有任何指令支持boolean类型。编译器在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型数据,将boolean和char类型数据零位扩展为相应的int类型数据。... 查看详情

介绍java中的常/变量.各种数据类型以及类型转换和提升的用法(代码片段)

...种,大小和范围)和引用数据类型(种类),简单介绍了包装类字符串类型,以及不同数据类型之间的常量和变量,数据类型之间的转换和提升…Java常/变量和数据类型一.什么是常量?二.什么是变量?三.数据类型有哪些?四.不同数据类型的... 查看详情

java语言中的string类跟byte、short、long、int、float、double、char、boolean等八大数据类型有什么不同?

String属于引用数据类型,这就是Java提供的字符串类,内部封装了很多方法(函数),简洁又安全那八种属于基础数据类型;这八种也有对应的引用数据类型int对应Integerchar对应Character其他都是首字母大写例如long对应Long引用类型... 查看详情

java基础语法|·数据类型

数据类型强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用Java的数据类型分为两大类基本类型引用类型什么是字节?位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。字节... 查看详情

值类型和引用类型是什么区别

1、简单比较  值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。  值类型(valuetype):byte,short,int,long,float,double,decimal,char&#x... 查看详情

golangstring和[]byte的对比(代码片段)

...数组,但为什么[]byte比string灵活,拼接性能也更高(动态字符串拼接性能对比)?何为string?什么是字符串?标准库builtin的解释:简单的来说字符串是一系列8位字节的集合,通常但不一定代表UTF-8编码的文本。字符串可以为空,... 查看详情

float和int都是32位,为什么表示范围不同?还有long和int又什么区别?

...2位。int类型是有符号的,因此,32位并不会全部用来存储数据,包括一个符号位,使用其他的31位来存储数据。用于存储整数类型变量。-2147483648~2147483647[-2^31~2^31-1]。long和int区别为:存储不同、数据范围不同、机器字长不同。一... 查看详情

009数据类型基础

...该用不同类型的数据去标识。三、不同数据类型数字类型字符串类型列表类型字典类型[布尔类型]( 查看详情

有了基本数据类型,为什么还需要包装类型(代码片段)

一:java数据类型  在java中有八种基本数据类型对应每种基本类型又有八种包装类型:  基本类型:boolean,char,int,byte,short,long,float,double  包装器类型:Boolean,Character,Integer,Byte,Short,Long,Float,Double  从上... 查看详情

delphi数据类型问题

...成不同类型来提高CPU运行效率,这也是一个原因.string就是字符串类型,如:'中国人'这就是一个字符串,顾名思义就是多个字符串起来的char是字符类型,这与字符串是有区别的,char类型占用一个byte,也就是说char类型最多只能装一... 查看详情

bytes是啥意思

...例如Mb表示Megabit。它通常用作计算机信息计量单位,不分数据类型。它也是程序设计语言里不可缺少的基本数据类型——整数。从历史上看,一个字节是用于编码一个比特数字符在计算机文字,它这样做的原因是基本的寻址许多... 查看详情