You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:47:37