【Python】bytes和hex字符串之间的相互转换。
【Python】bytes和hex字符串之间的相互转换。 反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧。
- 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转换是这样的:
>>> a = aabbccddeeff >>> a_bytes = a.decode(hex) >>> print(a_bytes) bxaaxbbxccxddxeexff >>> aa = a_bytes.encode(hex) >>> print(aa) aabbccddeeff >>>
- 在python 3环境上,因为string和bytes的实现发生了重大的变化,这个转换也不能再用encode/decode完成了。
2.1 在python3.5之前,这个转换的其中一种方式是这样的:
>>> a = aabbccddeeff >>> a_bytes = bytes.fromhex(a) >>> print(a_bytes) bxaaxbbxccxddxeexff >>> 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) bxaaxbbxccxddxeexff >>> aa = a_bytes.hex() >>> print(aa) aabbccddeeff >>>
last
data = bx820xb100x03xc3xb4 print(type(data) = , type(data)) #type(data) = <class bytes> lst = list(data) print(lst) print(type(lst[0])) #[130, 48, 177, 48, 48, 3, 195, 180] #<class int> tmp = data.hex() print(type(tmp), tmp) # <class str> 8230b1303003c3b4 strr = 8230b1303003c3b4 num = bytes.fromhex(strr) print(type(num), num) # <class bytes> bx820xb100x03xc3xb4