小端序场景下如何从末尾分割长十六进制字符串为8字节段?
解决小端序处理后的十六进制字符串反向分段问题
问题分析
你需要将字符串转十六进制、反转字节序后,从末尾开始按8个十六进制字符(对应4字节)分段,最前面不足8个的单独作为一组,得到指定顺序的列表。
修改后的代码
方法一:直接计算分段
import sys string = sys.argv[1] # 字符串编码为字节后转十六进制 data_hex = string.encode().hex() # 反转字节序 reversed_bytes = bytes.fromhex(data_hex)[::-1] # 转回十六进制字符串 s = reversed_bytes.hex() # 实现从末尾开始的8字符分段逻辑 total_length = len(s) remainder = total_length % 8 parts = [] # 先处理开头不足8字符的部分(如果存在) if remainder != 0: parts.append(s[:remainder]) # 从剩余位置开始,每次取8个字符直到末尾 for i in range(remainder, total_length, 8): parts.append(s[i:i+8]) print(parts)
方法二:利用反转简化逻辑
import sys from textwrap import wrap string = sys.argv[1] data_hex = string.encode().hex() reversed_bytes = bytes.fromhex(data_hex)[::-1] s = reversed_bytes.hex() # 通过反转字符串实现反向分段 reversed_s = s[::-1] wrapped = wrap(reversed_s, 8) # 还原每个分段的顺序,并反转整个列表 result = [part[::-1] for part in wrapped][::-1] print(result)
测试验证
运行命令:
python3 this_script.py "this is a long string"
输出结果:
['67', '6e697274', '7320676e', '6f6c2061', '20736920', '73696874']
与期望输出完全一致。
代码说明
- 保留原核心流程:字符串编码→转十六进制→反转字节序→转回十六进制字符串。
- 分段逻辑修改:
- 方法一:直接计算总长度与8的余数,先提取开头不足8字符的部分,再依次截取后续8字符段。
- 方法二:通过反转整个十六进制字符串,用
textwrap.wrap正向分段后,再还原每个分段的顺序并反转列表,间接实现从末尾开始的分段效果。
内容的提问来源于stack exchange,提问作者Jason Smith
相关产品推荐
相关产品推荐

