Python 3.5中如何将十六进制数原样转为字符串而非Unicode字符?
当然可以实现!
在Python 3.5里,完全能满足你把十六进制转义的字符(比如'\xff')转换成对应的十六进制字符串(比如"ff"),而不是解析成Unicode字符的需求。下面给你几种实用的方法:
方法1:利用ord()和格式化字符串
对于单个字符,你可以先用ord()获取它的Unicode码点,再通过格式化字符串转换成两位小写的十六进制字符串:
char = '\xff' hex_str = '{:02x}'.format(ord(char)) print(hex_str) # 输出: ff
如果需要大写的十六进制(比如"FF"),把格式符改成'{:02X}'就行。要是处理多个字符,可以用生成器表达式拼接:
s = '\xff\x00\x41' hex_str = ''.join('{:02x}'.format(ord(c)) for c in s) print(hex_str) # 输出: ff0041
方法2:转成字节后用hex()方法
Python 3.5已经新增了bytes.hex()方法,非常适合这个场景。你可以先把字符串用latin-1编码转成字节(latin-1是单字节编码,完美覆盖0-255的范围,不会出现编码错误),再调用hex()得到十六进制字符串:
char = '\xff' hex_str = char.encode('latin-1').hex() print(hex_str) # 输出: ff
处理多字符更简单,直接对整个字符串编码后调用hex():
s = '\xff\x00\x41' hex_str = s.encode('latin-1').hex() print(hex_str) # 输出: ff0041
方法3:使用binascii模块
binascii模块里的hexlify()函数也能完成这个任务,它会把字节转换成十六进制字节串,最后解码成普通字符串就行:
import binascii char = '\xff' hex_bytes = binascii.hexlify(char.encode('latin-1')) hex_str = hex_bytes.decode('ascii') print(hex_str) # 输出: ff
这些方法都在Python 3.5里完全可用,你可以根据自己的需求选择最顺手的一种~
内容的提问来源于stack exchange,提问作者M. Gruber
相关产品推荐
相关产品推荐

