Python中如何将已定义字符串等价转换为b""格式字节串
普通字符串转字节串的正确方法
直接调用bytes(string)无法得到预期结果,是因为Python3中字符串转字节串的构造逻辑要求显式指定编码规则,不会自动匹配b前缀字面量的解析逻辑,根据目标结果分两种场景处理:
- 场景1:需要得到和
b"0x340xEF"字面量完全等价的字节串(即字节内容对应'0'、'x'、'3'、'4'、'0'、'x'、'E'、'F'的ASCII编码值)
直接对字符串指定ASCII/UTF-8编码即可,两种写法效果完全一致:
执行后string = "0x340xEF" # 已定义的普通字符串 # 写法1 byte_result = string.encode("utf-8") # 写法2 byte_result = bytes(string, encoding="utf-8")byte_result == b"0x340xEF"的判断结果为True,和直接用b前缀定义的字节串完全等价。 - 场景2:需要把字符串中
0x标记的十六进制值解析为对应字节(即把"0x340xEF"解析为0x34、0xEF两个字节)
先清理掉字符串里的0x标记得到连续十六进制串,再用十六进制转字节的方法处理:
执行后import binascii string = "0x340xEF" hex_str = string.replace("0x", "") byte_result = binascii.unhexlify(hex_str)byte_result的值为b'4\xef',对应字节值为[0x34, 0xEF]。
注意:如果字符串里包含非ASCII范围的字符,需要根据实际存储的编码格式替换encode的参数,比如GBK编码场景下传入
encoding="gbk"即可。
内容的提问来源于stack exchange,提问作者Dr. Ernesto Chinchilla
相关产品推荐
相关产品推荐

