1. bytes(source)
--source为字符串时,则按照指定的 encoding 将字符串转换为字节序列
bytes('123asd', encoding='utf-8') # 输出为:b'123asd'
bytes('我', encoding='utf-8') # 输出为:b'\xe6\x88\x91'
--source为数字n(可以写为任意进制)时,则表示初始化n个字节的bytes序列,
bytes(5) # 输出为:b'\x00\x00\x00\x00\x00'
--source为可迭代类型,则元素必须为[0 ,255] 中的整数
bytes([1, 2, 3, 4]) # 输出为:b'\x01\x02\x03\x04'
同样是bytes类型的数据,为什么有的显示为b’123’这样子的,有的显示为b’\x00\x00\x00\x00\x00’?
因为utf-8和ASCII(包含数字0-9,英文Aa-zZ,以及一些符号)是兼容的,所以只是显示为b’123’,实际字节类型的存储形式都是二进制
2. bytes().hex()和bytes.fromhex()
--bytes(source).hex()
功能:将source转换为字节类型,然后以16进制字符串的形式显示出来
参数:source的类型同上
返回值:返回值为16进制字符串类型
实例:
bytes('123', encoding='utf-8').hex() # 输出为:313233 类型为<class 'str'>
--bytes.fromhex(hexstr)
功能:将传入的16进制字符串转换为字节类型,
返回值:字节类型, 形式可为b'', b'\x00\x00\x00\x00\x00'
bytes.fromhex('313233') # 输出为:b'123'
3. binascii.a2b_hex(hexstr) | binascii.unhexlify(hexstr) | bytes.fromhex(hexstr)
--功能:将16进制字符串转换为字节类型
--参数hexstr:必须包含偶数个十六进制数字(可以是大写或小写)
--返回值:由十六进制字符串hexstr表示的二进制数据
实例:
bytes.fromhex('313233') # 输出为:b'123'
binascii.a2b_hex('313233') # 输出为:b'123'
binascii.unhexlify('313233') # 输出为:b'123'
bytes.fromhex('abdc') # 输出为:b'\xab\xcd'
binascii.a2b_hex('abcd') # 输出为:b'\xab\xcd'
binascii.unhexlify('abcd') # 输出为:b'\xab\xcd'
4. binascii.b2a_hex(字节串) | binascii.hexlify(字节串) |
--功能:传入二进制,得到ascii编码的二进制形式
--参数:字节串
--返回值:返回二进制数据的十六进制表示
实例:
binascii.hexlify(b'abcd') # 输出为:b'61626364' <class 'bytes'>
binascii.b2a_hex(b'abcd') # 输出为:b'61626364' <class 'bytes'>
binascii.hexlify(b'%/\x8d\x80\xe6\xee\xb4\xcfB\x1c\xbaa\xb1\x07$\xee\xeb') # 输出为:252f8d80e6eeb4cf421cba61b10724eeeb
binascii.b2a_hex(b'%/\x8d\x80\xe6\xee\xb4\xcfB\x1c\xbaa\xb1\x07$\xee\xeb') # 输出为:252f8d80e6eeb4cf421cba61b10724eeeb
学习借鉴:
https://www.cnblogs.com/liming19680104/p/12175570.html (python–binascii–二进制和ASCII编码的二进制的转换)
https://www.pynote.net/archives/1383 (int与bytes的转换)
最后,感谢每一个无私分享的博主!