文章目录
- str与bytes相互转换
- 字符串转字节 str --> bytes
- 字节转字符串 bytes --> str
- bytes和hex字符串相互转换
- python 将字节字符串转换成十六进制字符串
str与bytes相互转换
a = b"Hello, world!" # bytes object
b = "Hello, world!" # str object
字符串转字节 str --> bytes
# 字符串转字节 str --> bytes
print(str.encode(b)) # 默认 encoding="utf-8"
print(bytes(b, encoding="utf-8"))
print(b.encode()) # 默认 encoding="utf-8"
字节转字符串 bytes --> str
# 字节转字符串 bytes --> str
print(bytes.decode(a)) # 默认encoding="utf-8"
print(str(a, encoding="utf-8"))
print(a.decode()) # 默认 encoding="utf-8"
bytes和hex字符串相互转换
反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换。
1、在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转换是这样的:
>>> a = 'aabbccddeeff'
>>> a_bytes = a.decode('hex')
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.encode('hex')
>>> print(aa)
aabbccddeeff
>>>
2、在python 3环境上,因为string和bytes的实现发生了重大的变化,这个转换也不能再用encode/decode完成了。
2.1、在python3.5之前,这个转换的其中一种方式是这样的:
>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = ''.join(['%02x' % b for b in a_bytes])
>>> print(aa)
aabbccddeeff
>>>
2.2、到了python 3.5之后,就可以像下面这么干了:
>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.hex()
>>> print(aa)
aabbccddeeff
>>>
python 将字节字符串转换成十六进制字符串
想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串
1)只是简单的解码或编码一个十六进制的原始字符串,可以使用binascii模块
>>> s = b'hello'
>>> # Encode as hex
>>> import binascii
>>> h = binascii.b2a_hex(s)
>>> h
b'68656c6c6f'
>>> binascii.a2b_hex(h)
b'hello'
>>>
2)类似的功能同样可以在base64 模块中找到
>>> import base64
>>> h = base64.b16encode(s)
>>> h
b'68656C6C6F'
>>> base64.b16decode(h)
b'hello'
>>>
3)大部分情况下,通过使用上述的函数来转换十六进制是很简单的。上面两种技术的主要不同在于大小写的处理。函数base64.b16decode() 和base64.b16encode() 只能操作大写形式的十六进制字母,而binascii 模块中的函数大小写都能处理
4)还有一点需要注意的是编码函数所产生的输出总是一个字节字符串。如果想强制以Unicode 形式输出,你需要增加一个额外的界面步骤
>>> h = base64.b16encode(s)
>>> print(h)
b'68656C6C6F'
>>> print(h.decode('ascii'))
68656C6C6F
参考:https://www.cnblogs.com/niuu/p/10106897.html
https://www.cnblogs.com/japhasiac/p/7739846.html
https://www.cnblogs.com/baxianhua/p/10593766.html