关于二进制文件跳过前20字节后逐6字节读取输出十六进制的代码实现求助
解决二进制文件跳过前20字节后逐6字节输出十六进制的问题
我来帮你调整代码,实现忽略前20字节、后续每次读取6字节并输出带空格分隔的十六进制格式的需求。我们可以分几步修改你的现有代码:
关键修改点
- 首先跳过文件前20字节:使用文件对象的
seek()方法直接定位到第21字节的位置(因为字节索引从0开始,seek(20)会跳过前20个字节) - 循环读取6字节块:直到文件指针走到末尾,没有更多内容可读
- 格式化输出:将每个字节转换为两位大写的十六进制字符串,并用空格分隔,匹配你期望的输出格式
修改后的完整代码
import sys from os.path import getsize target = './' + sys.argv[1] # 使用只读二进制模式打开文件,避免误修改原文件 with open(target, 'rb') as f: file_size = getsize(target) print(f"Size : {file_size}") # 跳过前20字节,直接定位到后续数据的起始位置 f.seek(20) # 循环读取6字节块,直到读完剩余内容 while True: # 每次读取最多6字节,返回bytes对象 chunk = f.read(6) if not chunk: # 没有更多内容可读时,退出循环 break # 将每个字节格式化为两位大写十六进制,并用空格连接 hex_str = ' '.join(f'{byte:02X}' for byte in chunk) print(hex_str, end=' ') # 最后换行,让输出格式更整洁 print()
代码细节解释
- 跳过前20字节:
f.seek(20)将文件指针移动到第20个字节之后,后续所有的read()操作都会从这里开始,完美实现忽略前20字节的需求 - 循环读取逻辑:
f.read(6)每次最多读取6字节,当文件走到末尾时会返回空的bytes对象,此时触发break退出循环,不用担心读取超出文件大小的问题 - 格式化输出:通过生成器表达式遍历chunk中的每个字节,用
f'{byte:02X}'将字节转为两位大写十六进制(不足两位自动补0),再用' '.join()拼接成带空格的字符串,最后用end=' '让所有输出连在一起,完全匹配你示例中的连续格式 - 模式优化:把原来的
rb+改为rb只读模式,因为我们只需要读取文件内容,避免意外写入操作修改原文件
如果需要输出小写的十六进制,只需要把代码中的02X改成02x即可。
内容的提问来源于stack exchange,提问作者Sliced_ice
相关产品推荐
相关产品推荐

