python3 str bytes bytearray 互相转换

你的名字 2021-07-28 23:07 651阅读 0赞

在一次aes解密中,我完全弄混了str、bytes、bytearray,结果导致解密的结果不正确。在这里记录一下三者的区别和相互转化的方法。

首先str是采用Unicode编码方式的序列,主要用于显示。

而bytes是字节序列,主要用于网络和文件传输。

bytearray和bytes是一样的,只是它是可变的,它们的关系和str与list类似。

在aes解密或者网络数据中,数据应该是bytes或bytearray。

str和bytes的相互转化就是编码和解码。

str——》bytes

  1. str="aabbcc"
  2. bytes=str.encode('utf-8')
  3. print(str)
  4. aabbcc
  5. print(bytes)
  6. b'aabbcc'

更简单的方式是使用b声明是bytes

  1. bytes=b'aabbcc'

bytes——》str

  1. bytes=b"aabbcc"
  2. str=bytes.decode('utf-8')
  3. print(bytes)
  4. b'aabbcc'
  5. print(str)
  6. aabbcc

bytes和str转化为bytearray都依赖于bytearray函数

bytes——》bytearray

  1. bytes=b"aabbcc"
  2. byarray=bytearray(bytes)
  3. print(byarray)
  4. bytearray(b'aabbcc')

str——》bytearray

  1. str="aabbcc"
  2. byarray=bytearray(str)
  3. print(byarray)
  4. bytearray(b'aabbcc')

常见的网络传输时,有hex字符串转为bytearray的需求可以使用bytearray.fromhex(),这时是不需要编码的。

  1. hexstr="098811"
  2. byarray=bytearray.fromhex(hexstr)
  3. print(byarray)
  4. bytearray(b'\t\x88\x11')

注意到长度减半!!!!!

bytearray——》str bytes

bytearray转为str和bytes 依赖于解码和bytes函数

  1. byarray=bytearray("aabbcc",encoding='utf-8')
  2. str=byarray.decode('utf-8')
  3. bytes=bytes(byarray)
  4. print (byarray)
  5. bytearray(b'aabbcc')
  6. print(str)
  7. aabbcc
  8. print(bytes)
  9. b'aabbcc'

发表评论

表情:
评论列表 (有 0 条评论,651人围观)

还没有评论,来说两句吧...

相关阅读