【第三章】Python基础字节序列之编码、解码,ASCII与初始化

server/2024/11/25 7:53:49/

字节序列

Python3 引入两个新的类型bytes、bytearray。

bytes不可变字节序列;bytearray是可变字节数组。

编码与解码

  • 编码:str => bytes,将字符串这个字符序列使用指定字符集encode编码为一个个字节组成的序列 bytes, str是python中使用的是unicode编码

  • 解码:bytes或bytearray => str,将一个个字节按照某种指定的字符集解码为一个个字符串组成的 字符串

 
 输入:'啊'.encode()   #unicode--> encode --> utf-8输出:b'\xe5\x95\x8a'​输入:b'\xe5\x95\x8a'.decode()输出:'啊'​输入:'啊'.encode('gbk')输出:b'\xb0\xa1'

ASCII

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统

熟记:

  1. \x00是ASCII表中第一项,C语言中的字符串结束符

  2. \t、\x09,表示tab字符

  3. \r\n是\x0d\x0a

  4. \x30~\x39 字符0~9,\x31是字符1

  5. \x41对应十进制65,表示A

  6. \x61对应十进制97,表示a

注意:这里的1指定是字符1,不是数字1 UTF-8、GBK都兼容了ASCII

 00000000   0     null  '\x00'00000000 init 0  str null ascii00001001 '\x09'  '\t'00001010 '\x0a'  '\n'13 0x0D  '\x0d'  '\r'65 0x41  '\x41'  'A'         #65//16=4  65%16=197 0x61  '\x61'  'a'48 0x30  '\x30'  '0' 49 0x31  '0x31'  '1'57 0x39  '\x39'  '9'​​'a\x09b\x0d\x0ac \x31\x41\x61' # 表示什么?  'a\tb\r\nc 1Aa''A' > 'a' # 谁大?  'a'大

Bytes初始化

  • bytes() 空bytes

  • bytes(int) 指定字节的bytes,被0填充

  • bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象

  • bytes(string, encoding[, errors]) -> bytes 等价于string.encode()

  • bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出一个新的不可变的bytes对象

  • 使用b前缀定义

    • 只允许基本ASCII使用字符形式b'abc9'

    • 使用16进制表示b"\x41\x61"

bytes类型和str类型类似,都是不可变类型,操作方法类似。

 print(b'abcd'[2]) # 返回int,指定是本字节对应的十进制数x = b'\t\x09'print(x, len(x))y = br'\t\x09'print(y, len(y))​输入:'啊'.encode(),b'\xe5\x95\x8a'.decode()输出:(b'\xe5\x95\x8a', '啊')​输入:bytes([1,9,10,13,0x41]),bytes(range(0x61,0x64))输出:(b'\x01\t\n\rA',b'abc')​输入:bytes(b'abc')输出:b'abc'​输入:bytes(5)输出:b'\x00\x00\x00\x00\x00'​输入:b1 = bytes(range(0x61,0x64))输出:b1[0] = 97
 ​​

bytearray初始化

  • bytearray() 空bytearray

  • bytearray(int) 指定字节的bytearray,被0填充

  • bytearray(iterable_of_ints) -> bytearray [0,255]的int组成的可迭代对象

  • bytearray(string, encoding[, errors]) -> bytearray 近似string.encode(),不过返回可变对象

  • bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象

b前缀表示的是bytes,不是bytearray类型 由于bytearray类型是可变数组,所以,类似列表。

  • append(int) 尾部追加一个元素

  • insert(index, int) 在指定索引位置插入元素

  • extend(iterable_of_ints) 将一个可迭代的整数集合追加到当前bytearray

  • pop(index=-1) 从指定索引上移除元素,默认从尾部移除

  • remove(value) 找到第一个value移除,找不到抛ValueError异常

  • 注意:上述方法若需要使用int类型,值在[0, 255]

  • clear() 清空bytearray

  • reverse() 翻转bytearray,就地修改

 
 b = bytearray()b.append(97)b.append(99)b.insert(1,98)b.extend([65,66,67])b.remove(66)b.pop()b.reverse()print(b) # 输出什么b.clear()


http://www.ppmy.cn/server/144738.html

相关文章

哪个牌子猫用空气净化器好?质量好的猫用空气净化器推荐

哪个牌子猫用宠物空气净化器好?冬天一关窗户就家里下起了猫毛雨,谁叫我养了只掉毛猫,真是无法呼吸。养猫人真的太不容易了。后面我男朋友挑了好久,终于挑到一款实用的养猫家电好物。这回真不是智商税,过敏皮炎患者&…

el-table :span-method 合并单元格(2.0)

2024.11.23今天我学习了如何使用el-table组件的合并单元格方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <template><div class"container"><el-table :data"table_data" :span-method"object_merge" border>&…

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件&#xff08;DDM&#xff09;作为一款高效的数据管理解决方案&#xff0c;致力于帮助企业在多个场景中实现数据的高效管理和应用&#xff0c;提升业务效率和用户体验。九河…

props.children的使用场景

props.children 是 React 中一个非常重要的特性&#xff0c;它用于访问组件的子元素。这些子元素可以是其他组件、字符串、数字、数组或者任何有效的 React 元素。props.children 是 React 提供的一种机制&#xff0c;使得父组件可以将其内容传递给子组件&#xff0c;并且子组件…

聚水潭与MySQL数据集成案例分享

聚水潭数据集成到MySQL的技术案例分享 在现代数据驱动的业务环境中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接成为企业关注的焦点。本次案例将详细介绍如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据无缝集成到MySQL数据库中&#xff0c;实现从“聚水谭…

【D04】网络安全基本命令

网络安全基本命令 想学会网络安全,就必须学会基本的网络常用命令,才能更好的去掌握网络,保护自己的系统&#xff0c;防止入侵。我们必须学会的基本的网络命令主要是基于Windows NT平台下的基本命令&#xff0c;也就是说windows 98/windows ME的下部分命令是不能运行的。所以说&…

Leetcode146. LRU 缓存(HOT100)

链接 代码&#xff1a; class LRUCache { private:struct Node{int key,val;Node* left,*right;Node(int _key,int _val):key(_key),val(_val){}}*L,*R;unordered_map<int,Node*> hash;int n;public:void remove(struct Node* p){p->left->right p->right;p-…

设计模式之 解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;主要用于解决特定问题的解析和解释。这个模式的核心思想是定义一种语言的语法规则&#xff0c;并利用这些规则来解释和执行相应的表达式。解释器模式为设计语言解释器提供了一种解决方案…