2023年 3月 19日

python 字节数组_Python:字节和字节数组的详细信息,Pythonbytesbytearray,详解

这里是一段防爬虫文本,请读者忽略。

本文原创首发于CSDN,作者IDYS

博客首页:https://blog.csdn.net/weixin_41633902/

本文链接:https://blog.csdn.net/weixin_41633902/article/details/107424044

未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

写在开头的话

请记住:实践是掌握知识的最快方法

如果你只是怀着看看的态度去快速浏览文章,而不去认认真真的把文章里面讲的任何一个知识点去实践一遍,那么你永远也掌握不了它

生命不息,折腾不止!

Python: bytes、bytearray

00. 概述

Python3

引入两个新类型

bytes

不可变字节序列

bytearray

字节数组

可变

字符串与

bytes

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

bytes

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

bytearray

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

编码与解码

字符串按照不同的字符集编码

encode

返回字节序列

bytes

encode(encoding=’utf-8′, errors=’strict’) -> bytes

字节序列按照不同的字符集解码

decode

返回字符串

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

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

ascii

码表

01.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″

演示

print(bytes())

print(bytes(1))

print(bytes([97, 98, 65, 66, 67, 68]))

print(bytes(“pwd”, “utf-8”))

print(“pwd”.encode())

print(b”pwd”.decode())

a = b’pwd’

b = bytes(a)

print(a is b)

print(a == b)

print(id(a))

print(id(b))

print(type(b”abc”))

print(b”\x61\x62\x63″)

运行结果

b”

b’\x00′

b’abABCD’

b’pwd’

b’pwd’

pwd

True

True

2325249407856

2325249407856

b’abc’

02. 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

类型

演示

print(b”pwd who am i “.replace(b”i”, b”who”))

print(b”who am i i love you”.split(b”i”))

print(bytes.fromhex(“61626309313233”))

print(“ABC”.encode().hex())

print(b”1234567ABCabc”[2])

print(b”1234567ABCabc”[8])

print(b”1234567ABCabc”[10])

运行结果

b’pwd who am who ‘

[b’who am ‘, b’ ‘, b’ love you’]

b’abc\t123′

414243

51

66

97

03. 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

类型

演示

print(bytearray([97, 98, 99]))

print(bytearray(“12345″, encoding=”utf”))

print(type(bytearray(“12345″, encoding=”utf”)))

print(type(“123456”.encode()))

print(type(bytearray(b”abcde”)))

运行结果

bytearray(b’abc’)

bytearray(b’12345′)

04. 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]

返回该字节对应的数,

int

类型

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(“abcdef”, encoding=”utf-8″)

print(type(b))

b.append(65)

print(b)

b.append(67)

print(b)

b.insert(2, 70)

print(b)

b.extend([97, 98, 99])

print(b)

b.pop()

print(b)

b.remove(97)

print(b)

for i in b:

print(“%s” % chr(i), end=” “)

print()

b.reverse()

print(b)

b.clear()

print(b)

运行结果

bytearray(b’abcdefA’)

bytearray(b’abcdefAC’)

bytearray(b’abFcdefAC’)

bytearray(b’abFcdefACabc’)

bytearray(b’abFcdefACab’)

bytearray(b’bFcdefACab’)

b F c d e f A C a b

bytearray(b’baCAfedcFb’)

bytearray(b”)

05. 进制转化

5.1 转化为十进制

二进制转化为十进制

print(int(“1101”, 2))

print(type(int(“1101”, 2)))

运行结果

13

八进制转化为十进制

print(int(“31”, 8))

运行结果

25

十六进制转化为十进制

print(int(“21”, 16))

运行结果

33

5.2 转化为二进制

十进制转化为二进制

print(bin(12))

print(bin(16))

运行结果

0b1100

0b10000

八进制转化为二进制

print(bin(0o12))

运行结果

0b1010

十六进制转化为二进制

print(bin(0x23))

运行结果

0b100011

5.3 转化为八进制

二进制转化为八进制

print(oct(0b111001))

运行结果

0o71

十进制转化为八进制

print(oct(13))

运行结果

0o15

十六进制转化为八进制

print(oct(0x16))

运行结果

0o26

5.4 转化为十六进制

二进制转化为十六进制

print(hex(0b11))

运行结果

0x3

八进制转化为十六进制

print(hex(0o12))

运行结果

0xa

十进制转化为十六进制

print(hex(11))

运行结果

0xb

5.10 十进制转化为其他进制

演示

print(format(10, ‘b’)) # 十进制转二进制

print(format(20, ‘o’)) # 十进制转八进制

print(format(15,’x’)) # 十进制转 十六进制

运行结果

1010

24

f

6. 类型转换

chr()

将整数转化为字符

ord()

将字符转化为整数值

演示

print(chr(97))

print(ord(‘w’))

运行结果

a

119

写在最后的话:

无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致

欢迎关注我的CSDN博客,

IDYS’BLOG

持续更新内容

linux基础 | 数据通信(路由交换,WLAN) | Python基础 | 云计算

如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!

虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!