Python字节串疑问:含可见字符的字节串解析与追加需求
Python字节串中可见字符的原理及追加数据方法
一、为什么字节串里会出现可见字符
Python显示字节串时,会自动把可打印ASCII字符(比如字母、数字、常用符号)直接显示成对应的字符,而非统一用\xhh的十六进制转义格式。举几个你例子里的对应关系:
- 字节
0x48对应ASCII的'H',所以显示为H - 字节
0x51对应ASCII的'Q',所以显示为Q - 字节
0x49对应ASCII的'I',所以显示为I - 字节
0x27对应ASCII的单引号',所以直接显示'
你用hex()得到的十六进制串已经验证了这一点:所有可见字符的位置,对应的十六进制值就是该字符的ASCII码。字节串本质还是二进制数据,这种显示方式只是Python为了可读性做的优化,完全不影响数据本身的内容。
二、向字节串追加数据的几种方法
Python里bytes是不可变类型,所以追加数据需要生成新的字节串,常用方式有以下三种:
1. 直接用+运算符拼接
这是最直观的方式,直接把原字节串和要追加的字节数据相加:
original_bytes = b"H\x00\x84\xffQ\x00\xa6\xff+\x00\x96\xff\xc2\xffI\xff\xa5\xff'\xff\x8a\xff\x19\xff\x19\xff\xf6\xfe\xb0\xfe\xc7\xfeJ\xfel\xfe\xf8\xfd+\xfe\xef\xfd:\xfe\xc3\xfd*\xfe_\xfd\xdf\xfd\n\xfd\xa3\xfd\xc6\xfcq\xfd\xbd\xfc?\xfd" # 追加单个字节(比如0xAB) new_bytes = original_bytes + b'\xab' # 追加多个可见字符组成的字节串 new_bytes2 = original_bytes + b'abc123' # 追加十六进制形式的字节序列 new_bytes3 = original_bytes + b'\x10\x20\x30'
2. 使用bytes.join()批量拼接
如果需要合并多个字节片段,join的效率更高:
# 把原字节串和多个追加片段放在列表里 parts = [original_bytes, b'\x00\x01', b'hello'] # 用空字节串拼接所有片段 new_bytes = b''.join(parts)
3. 用bytearray实现可变操作
如果需要频繁修改字节数据(不止一次追加),可以先转成bytearray(可变字节数组),操作完再转回bytes:
# 把原字节串转成可变的bytearray byte_arr = bytearray(original_bytes) # 追加单个字节 byte_arr.append(0xCD) # 追加多个字节 byte_arr.extend(b'\xef\x0f') # 转回不可变的bytes类型 new_bytes = bytes(byte_arr)
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

