Python中如何将文本文件中的bytearray字符串转为可处理格式?
解决bytearray序列化后读取为字符串无法转换的问题
这问题我之前处理过,核心是你在pickle保存/读取环节的方式不对,导致原本的字节数值列表变成了字符串形式的文本,传给dehex时自然没法正确解析。咱一步步来解决:
一、先纠正pickle的正确用法(推荐方案)
Pickle是二进制序列化工具,千万别用文本模式打开文件读写,不然二进制数据会被转成乱码字符串,读取后根本不是原来的bytearray。
正确保存bytearray
import pickle # 你的目标bytearray target_ba = bytearray([0xe7, 0xcd, 0xb0, 0xa2]) # 必须用二进制写入模式'wb' with open('byte_data.pkl', 'wb') as f: pickle.dump(target_ba, f)
正确读取并转换
import pickle from your_module import dehex # 假设你的dehex函数在这个模块里 with open('byte_data.pkl', 'rb') as f: loaded_ba = pickle.load(f) # 直接传入dehex,因为loaded_ba是原生bytearray类型 result = dehex(loaded_ba) print(result) # 输出: b'\xe7\xcd\xb0\xa2'
二、如果已经错误保存成了txt字符串(补救方案)
如果已经把数据存成了类似"[0xe7,0xcd,0xb0,0xa2]"的文本字符串,那需要先把这个字符串解析成整数列表,再传给dehex:
from your_module import dehex def parse_str_to_int_list(s): # 去掉字符串前后的[],按逗号分割,再把每个十六进制字符串转成整数 return [int(hex_str.strip(), 16) for hex_str in s.strip('[]').split(',')] # 假设从txt文件读取到的字符串是这个 read_str = "[0xe7,0xcd,0xb0,0xa2]" int_list = parse_str_to_int_list(read_str) # 现在就能正常转成bytes了 result = dehex(int_list) print(result) # 输出: b'\xe7\xcd\xb0\xa2'
为什么原来的方式不行?
你之前读取得到的是["0xe7,0xcd,0xb0,0xa2"]——这是一个包含单个长字符串的列表,bytearray(d)会把字符串的每个字符(比如'0'、'x'、'e')转成对应的ASCII码,完全不是你要的十六进制字节值,自然无法正确转换。
内容的提问来源于stack exchange,提问作者Marcus F
相关产品推荐
相关产品推荐

