如何将用户输入转为十六进制并在各字符对应值间插入NULL字符
问题根因
你原有代码的核心错误有两个:
- 直接对
hexlify返回的bytes对象用str()转换,会把bytes的标识b'和尾部的'也当成普通字符串内容处理,导致后续拼接混入多余字符 - 对拼接后的结果重复做了
hexlify转换,完全偏离了需求目标
正确实现代码
import binascii def convert_content(input_bytes: bytes) -> bytes: # 先把输入转成纯十六进制字符串(不带b''前缀) hex_str = binascii.hexlify(input_bytes).decode('ascii') # 每两个字符为一组(对应一个原字符的十六进制值) hex_chunks = [hex_str[i:i+2] for i in range(0, len(hex_str), 2)] # 用00拼接所有分组 result_str = '00'.join(hex_chunks) # 转成bytes格式返回 return result_str.encode('ascii') # 测试示例 content5 = rb"111" res = convert_content(content5) print(res)
运行输出:
b'3100310031'
实现逻辑说明
- 第一步用
hexlify把原字节串转成十六进制表示的bytes,再解码为纯ASCII字符串,比如输入rb"111"这一步得到字符串"313131" - 第二步按每两位分割字符串,得到
["31", "31", "31"],每一项对应原字节串中一个字符的十六进制值 - 第三步用
00作为分隔符拼接所有分组,得到"3100310031" - 最后编码为bytes即可得到预期输出
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

