欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中的字符处理,bytes,bytearray

程序员文章站 2022-03-16 08:53:43
...

博客格式:

代码

返回值

(一)bytes,bytearray

字符串与bytes
  • 字符串是字符组成的有序序列,字符可以使用编码来理解
  • bytes是字节组成的有序的不可变的序列
  • bytearray是字节组成的有序的可变序列
编码与解码
  • 字符串按照不同的字符集编码encode返回字节序列bytes
    encode(encoding=‘utf-8’,errors=‘strict’) ->byes
  • 字节序列按照不同的字符集解码decode返回字符串
    bytes.decode(encoding=‘utf-8’,errors=‘strict’) ->str
    bytearry.decode(encoding=‘utf-8’,errors=‘strict’) ->str
    ASCII(American Standard Code for Infromation Interchange)
    美国信息交换标准代码)是基于拉丁字母的一套单字节编码系统
    1310 \r\n
    41 A
    61 a
    48 0

(二)bytes定义

  • bytes() 空bytes
bytes()

b’’

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

b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’

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

b’\x00\x01\x02\x03\x04’

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

b’abc’

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

b’abc’

  • 使用b前缀定义
    • 只允许进本ASCII使用字符形式b’abc9’
      使用16进制表示b"\x41\x61"

(三)bytes操作

  • 和str类型类似,都是不可变类型,所以很多方法都一样。只不过bytes的方法,输入的是bytes,输出的是bytes
    b'abcdef'.replace(b'f',b'k')

b’abcdek’

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

1

  • 类方法 bytes.fromhex(string)
    • bytes.fromhex(string)
    bytes.fromhex('6162 09 6a 6b00')

b’ab\tjk\x00’

  • hex()
    • 返回16进制表示的字符串
    ‘abc'.encode().hex()

‘616263’

  • 索引
    b’abcdef’[2]返回该字节对应的数,int类型

(四)bytearray定义

  • bytearray()空bytearray

bytearray(b’’)

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

bytearray(b’\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’)

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

bytearray(b’\x00\x01\x02\x03\x04’)

  • bytearray(string,encoding[,errors])->bytearray 近似string.encode(,不过返回可变对象)
bytearray('6162 09 6a 6b00','utf-8')

bytearray(b’6162 09 6a 6b00’)

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

bytearray(b’abc’)

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

(五)bytearray操作

  • 和bytes类型的方法相同
    bytearray(b'abcdef').replace(b'f',b'k')  

bytearray(b’abcdek’)

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

1

  • 类方法 bytearray.fromhex(string)
    • string必须是两个的16进制的形式,’6162 6a 6b’,空格将被忽略
    bytearray.fromhex('6162 096a 6b00')

bytearray(b’ab\tjk\x00’)

  • hex()
    • 返回16进制表示的字符串
     bytearray('abc'.encode()).hex()

‘616263’

  • 索引
    bytearray(b’abcdef’)[2]返回该索引对应的数,int类型
bytearray(b'abcdef')[2]

99

(五)int和bytes

  • int.from_bytes(bytes,byteorder)
    • 将一个字节数组表示成整数
int.from_bytes(b'abc','big')

6382179

  • int.to_bytes(length,byteorder)
    • byteorder字节序
    • 将一个整数表达成一个指定长度的字节数组
      i = int.from_bytes(b’abc’,‘big’)
      print(i,hex(i)) #6382179 0x616263
      print(i.tobytes(3,‘big’)) #‘abc’
i = 'abc'
i = i.encode()
i = int.from_bytes(b'\x61\x62\x63','big')
i.to_bytes(3,'big').decode()
int.from_bytes('abc'.encode(),'big')

6382179

abc得到bytes得到整形从to bytes得到bytes然后encode还原回去

小练习

字符串—>int—>十六进制—>bytes—>十六进制—>bytearray—>字符串

a = 'hello word'                     #赋值a
a = a.encode()                       #编码
a = int.from_bytes(a,'big')          #将bytes转换为int
a = a.to_bytes(10,'big')             #将int转换为bytes
a = a.hex()                          #bytes转换为16进制字符串
a = bytes.fromhex(a)                 #16进制转换为bytes
a = a.hex()                          #bytes转换为16进制
a = bytes.fromhex(a)                 #16进制转换为bytes
a = bytearray(a)                     #bytes转换为byteaaray
a = a.decode('utf8')                 #将bytearray解码

 

上一篇: const

下一篇: c++const关键字小节