python中指定变量为1byte_Python内置数据结构----bytes和bytearray

bytes和bytearray

Python提供了两种字节序列:不可变的 bytes 和 可变的 bytearray

字符串是字符组成的有序序列,在内存和磁盘中,所有的对象都是以二进制数字(0和1)表示的。因为这些数字每8个为1组组成一个字节,所以1字节的只能表示最多256个不同的值。

Python中的bytes只支持ASCII码标准中的128个字符,其余的128个必须用转移序列表示。

当超过1字节后,直接将Unicode码点表示成对应的二进制数字会存在问题:

1、字节顺序问题

2、浪费空间

编码和解码

字符串按照不同的字符集进行编码encode,返回字节序列bytes

语法:encode(encoding='utf-8',errors='strict') -> bytes

In [106]: 'hello world!'.encode(encoding='utf-8')

Out[106]: b'hello world!'

In [115]: '啊'.encode(encoding='gbk')

Out[115]: b'\xb0\xa1'

In [116]: '啊'.encode(encoding='utf8')

Out[116]: b'\xe5\x95\x8a'

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

语法:

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

In [107]: b'hello world!'.decode()

Out[107]: 'hello world!'

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

In [111]: bytearray(b'hello world!').decode()

Out[111]: 'hello world!'

bytes定义

定义空bytes

In [118]: bytes()

Out[118]: b''

定义指定字节的bytes,被0填充

In [120]: bytes(1)

Out[120]: b'\x00'

In [121]: bytes(10)

Out[121]: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

定义由数字 [0,255] 组成的bytes

bytes(iterable_of_ints)  -> bytes

In [124]: bytes([1,2])

Out[124]: b'\x01\x02'

In [125]: bytes((1,2))

Out[125]: b'\x01\x02'

In [127]: bytes(range(256))

Out[127]: b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'

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

In [131]: bytes('hello world','utf8')

Out[131]: b'hello world'

In [132]: 'hello world'.encode()

Out[132]: b'hello world'

从一个字节序列或者buffer中拷贝出一个新的不可变bytes对象

bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer

In [134]: b1='hello world'.encode()

In [135]: b2=bytes(b1)

In [136]: b2

Out[136]: b'hello world'

使用b前缀定义

只允许使用基本ASCII码

In [137]: a=b'python'

In [138]: a

Out[138]: b'python'

In [139]: a=b'python啊'

File "", line 1

a=b'python啊'

^

SyntaxError: bytes can only contain ASCII literal characters.

bytes的方法

bytes的方法和str类似,只不过bytes的方法输入是bytes,输出也是bytes

In [140]: b'abc'.find(b'a')

Out[140]: 0

In [141]: b'abc'.find(b'b')

Out[141]: 1

In [142]: b'abc'.rfind(b'b')

Out[142]: 1

In [143]: b'abc'.index(b'b')

Out[143]: 1

In [144]: b'abc'.index(b'c')

Out[144]: 2

In [145]: b'abc'.replace(b'c',b'd')

Out[145]: b'abd'

In [148]: b'abc'.split()

Out[148]: [b'abc']

In [149]: b'abc'.split(b'b')

Out[149]: [b'a', b'c']

类方法fromhex(string)

string必须是2个字符的16进制形式,其中空格会被忽略

In [2]: bytes.fromhex('61 09 0a 0d ')

Out[2]: b'a\t\n\r'

hex()

返回16进制表示的字符串

In [6]: '\t\n\razAZ'.encode().hex()

Out[6]: '090a0d617a415a'

索引访问

返回字节序列中索引元素对应的值,int类型

In [7]: b'a\t\n\r'[1]

Out[7]: 9

In [8]: b'a\t\n\r'[0]

Out[8]: 97

bytearray的定义

定义空bytearray

In [9]: bytearray()

Out[9]: bytearray(b'')

定义指定字节的bytearray

语法:bytearray(int) 被0填充

In [11]: bytearray(9)

Out[11]: bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00')

使用可迭代对象([0,255]int组成)定义bytearray

语法:bytearray(iterable_of_ints) -> bytearray

In [12]: bytearray(range(3))

Out[12]: bytearray(b'\x00\x01\x02')

In [13]: bytearray(['a','b','c'])

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in

----> 1 bytearray(['a','b','c'])

TypeError: an integer is required

定义字符串对应的bytearray

In [15]: bytearray('abc','utf8')

Out[15]: bytearray(b'abc')

从字节序列或buffer中复制出一个可变的bytearray对象

In [16]: bytearray(b'a')

Out[16]: bytearray(b'a')

bytearray的方法

In [17]: bytearray(b'abc').find(b'b')

Out[17]: 1

In [18]: bytearray(b'abc').find(b'a')

Out[18]: 0

In [19]: bytearray(b'abc').replace(b'a',b'd')

Out[19]: bytearray(b'dbc')

In [21]: bytearray(b'abc').replace(b'a',bytes([1,2]))

Out[21]: bytearray(b'\x01\x02bc')

In [22]: bytearray(b'abc').index(b'a')

Out[22]: 0

In [23]: bytearray(b'abc').index(b'c')

Out[23]: 2

In [24]: bytearray(b'abc').split(b'b')

Out[24]: [bytearray(b'a'), bytearray(b'c')]

In [34]: a= bytearray()

In [35]: a.append(1)

In [36]: a

Out[36]: bytearray(b'\x01')

In [37]: a.append(10)

In [38]: a

Out[38]: bytearray(b'\x01\n')

In [39]: a.insert(10,0)

In [40]: a

Out[40]: bytearray(b'\x01\n\x00')

In [41]: a.insert(0,10)

In [42]: a

Out[42]: bytearray(b'\n\x01\n\x00')

类方法fromhex(string)

In [28]: bytearray.fromhex('09')

Out[28]: bytearray(b'\t')

In [29]: bytearray.fromhex('0a')

Out[29]: bytearray(b'\n')

hex()

In [33]: bytearray('a\t'.encode()).hex()

Out[33]: '6109'

标签:bytearray,abc,Python,bytes,world,x00,Out

来源: https://www.cnblogs.com/zh-dream/p/13423873.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值