1- bytes

b'C'      b'\x01'     b'\x010203'    b'hello'

>>> a = b'\x01'
>>> type(a)
<class 'bytes'>

>>> a = b'C'
>>> type(a)
<class 'bytes'>

>>> a = b'\x010203'
>>> type(a)
<class 'bytes'>
>>> len(a)
5

>>> a = bytes()
>>> a
b''
>>> type(a)
<class 'bytes'>
>>> 
>>> 
>>> a = b'hello'
>>> type(a)
<class 'bytes'>
>>> a
b'hello'

Python3 bytes 函数


描述

bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。

语法

以下是 bytes 的语法:

class bytes([source[, encoding[, errors]]])

参数

  • 如果 source 为整数,则返回一个长度为 source 的初始化数组;bytes(int)指定字节的bytes,被0填充
  • 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
  • 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
  • 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
  • 如果没有输入任何参数,默认就是初始化数组为0个元素。

2-bytearray

>>> a = bytearray((1,2,4,5))
>>> type(a)
<class 'bytearray'>
>>> a
bytearray(b'\x01\x02\x04\x05')

描述

bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。

语法

bytearray()方法语法:

class bytearray([source[, encoding[, errors]]])

参数

  • 如果 source 为整数,则返回一个长度为 source 的初始化数组;
  • 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
  • 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
  • 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
  • 如果没有输入任何参数,默认就是初始化数组为0个元素。

 

3-str与bytes之间的转换

# bytes object
b = b"example"

# str object
s = "example"

# str to bytes
s2b = bytes(s, encoding = "utf8")

# bytes to str
b2s = str(b, encoding = "utf8")

# an alternative method
# str to bytes
s2b2 = str.encode(s)

# bytes to str
bs2 = bytes.decode(b)

4-bytes、bytearray

Python3引入两个新类型:

  • bytes:不可变类型
  • bytearrayy:字节数组,可变

bytes操作

除了格式化方法(format和format_map)和几个处理unicode数据的方法(包括casefold、idecimal、isdentifier、isnumeric、isprintable和encode)之外,str类型的其他方法都支持bytes和bytearray

  • 类方法bytes.fromhex(string)
    string必须是2个字符的16进制形式,“61 62 6a 6b”,空格将被忽略
In [8]: a=bytes.fromhex("61 62 63 6a 6b") 

In [9]: a
Out[9]: b'abcjk'
  • hex()和上面相反
  • 返回进制的字符串
In [10]: b="abc".encode().hex()

In [11]: b
Out[11]: '616263
  • int.from_bytes(bytes, byteorder)
  • bytes类型转换为十进制整数int类型
In [6]: a = int.from_bytes(b"abc", "big")

In [7]: hex(a)
Out[7]: '0x616263'
  • 索引,返回一个int类型数
In [12]: b"abcd"[1]
Out[12]: 98

bytearray操作

  • 和bytes类型的方法相同
In [9]: bytearray(b"abcdefk").replace(b"f",b"m")
Out[9]: bytearray(b'abcdemk')
In [10]: bytearray(b"abcdefk").find(b"a")
Out[10]: 0
  • 类方法
    bytearray.fromhex(string)
    string必须是2个字符的16进制形式
In [11]: bytearray.fromhex("61 62 6364 65")
Out[11]: bytearray(b'abcde')
  • hex()上面的相反
In [12]: bytearray("abc".encode()).hex()
Out[12]: '616263'
  • 索引
In [13]: bytearray(b"abcde")[1]
Out[13]: 98
  • append(int)尾部追加一个元素
In [14]: b=bytearray()
In [15]: b.append(97)

In [16]: b
Out[16]: bytearray(b'a')
  • insert(index,int)在指定位置插入元素
In [17]: b.insert(1,99)

In [18]: b
Out[18]: bytearray(b'ac')
  • extend(iyterable_of_ints)将一个可迭代的整数集合追加到当前的bytearray
In [19]: b.extend([65,66,67])

In [20]: b
Out[20]: bytearray(b'acABC')
  • pop(index= -1)从指定的索引上一处元素,默认从尾部移除,返回移除的值的int类型
In [21]: b.pop()
Out[21]: 67
  • remove(value),找到第一个value移除,找不到抛异常
  • clear()清空bytearray
In [29]: b
Out[29]: bytearray(b'acA')

In [30]: b.clear()

In [31]: b
Out[31]: bytearray(b'')
  • reverse()就地翻转
In [27]: b
Out[27]: bytearray(b'Aca')

In [28]: b.reverse()

In [29]: b
Out[29]: bytearray(b'acA')

5-int byte

use python3 package struct


>>> bytes([97])
b'a'
>>> ord(b'a')
97
>>>