Python内置数据结构——bytes,bytearray
admin
2023-07-21 04:22:42
0

bytes,bytearray

字符串与bytes

  • 字符串是字符组成的有序序列,字符可以使用编码来理解

  • bytes是字节组成的有序的不可变序列

  • bytesarray是字节组成的有序的可变序列

编码与解码

  • 字符串按照不同的字符集编码encode返回字序列bytes

            bytes.encode(encoding = 'utf - 8',errors = 'stirct') -> bytes

  • 字节序列按照不同的字符集解码decode 返回字符串

            bytes.decode(encoding = "utf - 8",errors = "strict") -> str

            bytearray.decode(encoding ="utf - 8",errors = "strict" ) -> str

ASCII

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

bytes定义

  • bytes() 空bytes

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

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

  • bytes(string,encodeing[,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类型类似,都是不可变类型,所以犯法很多都一样,只不过bytes的方法,输入是bytes,输出是bytes

    • b'abcdef'.replace(b'f',b'k')

    • b'abc'.find(b'b')

  • 类方法 bytes.fromhex(string)

    • string必须是2 个字符的16进制的形式,"6162 6a 6b", 空格将被忽略

    • bytes.fromhex("6162 09 6a 6b00")

  • hex()

    • 返回16 进制表示的字符串

    • "abc".encode().hex()

  • 索引

    • b.'abcdef'[2] 返回该字节对应的数,int类型

bytearray定义

定义:

  • bytearray()空bytearray

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

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

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

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

注意:b前缀定义的类型是bytes类型

bytearray操作

  • 和bytes类型的方法相同

    • bytearray(b'abcdef').replace(b'f',b'k')

    • bytearray(b'abc').find(b'b')

  • 类方法 bytearray.fromhex(string)

    • string必须是2 个字符的16进制的形式,‘6162 6a 6b’,空格将被忽略

    • bytearray.fromhex('6162 09 6a 6b00')

  • hex()

    • 返回16 进制表示的字符串

    • bytearray('abc'.encode()).hex()

  • 索引

    • bytearray(b'abcdef')[2] 返回该字节对应的数,in类型


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

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

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

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

  • .remove(value)找到第一个value移除,找不到抛value error

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

  • .clear() 清空bytearray

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

int 和 bytes 之间转换

  • int.from_bytes(bytes,byteorder)

    • 将以个字节数组表示成整数

  • int.to_bytes(length, byteorder)

    • byteorder 指字节序(大端big)

    • 将一个整数表达成一个指定长度的字节数组

i = int.form_bytes(b.'abc', 'big')
print( i , hex()) # 6382179  0x616263
printn(i.to_bytes(3 , 'big')) # b'abc'


所有数据在内存中全部都是2进制的形式,人要理解一个内存中的数据必须先要指定它的类型,否则这个数据是没有意义的

一个字节 = 8位

一个字节0~255

两个字节0~65535

0~255

0~127


大小端的意思是在内存中数据是如何存放的 (大小端代表着高低字节)例如:如果给两个字节ab 是a放高地址呢还是b放高地址呢

低字节放在高地址上,大端模式big

低字节放在小地址上,小端模式little

高低字节的排放顺序~~~

网络上采用大端模式

windows内部采用小端模式

mac用大端模式



相关内容

热门资讯

意大利总理回击特朗普批评:应关... △意大利总理梅洛尼(资料图)意大利总理梅洛尼20日就美国总统特朗普针对其政府的最新批评作出回应,称特...
以总理及防长被曝已命令以军在黎... 据以色列方面20日消息,以色列总理内塔尼亚胡和国防部长卡茨已下达指令,要求以军在黎巴嫩停火。根据该指...
梁文杰称台湾人几乎不吃凤梨释迦... 海峡导报综合报道 台陆委会副主委梁文杰18日称凤梨释迦“台湾人几乎不吃,是仰大陆鼻息的农产品”,引起...
伊朗谈判代表已启程前往瑞士 据伊朗方面20日消息,伊朗谈判代表已启程前往瑞士,就谅解备忘录与美方进行讨论。6月20日,巴基斯坦外...
美军称暂未观察到伊朗关闭霍尔木... 新华社华盛顿6月20日电 据美国媒体20日援引美国高级官员的话报道称,美军暂未观察到伊朗关闭霍尔木兹...
万亿市场,“爆发前夜” 就在SpaceX6月12日完成纳斯达克首秀前,创始人埃隆·马斯克在一场访谈上确认,SpaceX正在开...
乌俄互指对方在赫尔松州发动袭击 乌克兰赫尔松州军事管理局20日在社交媒体发文称,截至当天早上6时,赫尔松州乌控区在过去24小时内遭俄...
伊朗外长将与巴基斯坦内政部长一... 当地时间20日,有消息显示,伊朗外长阿拉格齐20日晚将与巴基斯坦内政部长纳克维一同前往瑞士。伊朗外交...
文博日历丨早在8000年前 古... 端午假期各地特色龙舟活动轮番亮相其实,早在8000年前先民们就已经是有船一族了今天带你一起解锁“远古...
凤凰晚报丨35岁宝妈亲手勒死3... 今日人物【35岁宝妈亲手勒死3个娃,丈夫:不怪她】最近,美国马萨诸塞州一起震惊全美的“杀婴案”再次开...