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

为何自制Python hexdump脚本输出与xxd不符?求调整方案

修正你的Hexdump脚本以匹配xxd格式

我帮你梳理下问题,你的脚本主要有两个核心地方需要调整,才能和xxd的输出格式完全对齐。下面是修正后的完整代码,以及对应的改动说明:

修正后的代码

import sys
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("file", help="Input File")
args = parser.parse_args()

try:
    with open(args.file, 'rb') as infile:
        with open(args.file + ".dump", 'w') as outfile:
            offset = 0
            while True:
                line = infile.read(16)
                if len(line) == 0:
                    break
                
                # 处理十六进制部分:每两个字节为一组,统一大写显示
                hex_groups = []
                for i in range(0, len(line), 2):
                    if i + 1 < len(line):
                        hex_groups.append(f"{line[i]:02X}{line[i+1]:02X}")
                    else:
                        # 处理文件末尾不足2字节的情况,补空格对齐
                        hex_groups.append(f"{line[i]:02X}  ")
                
                # 拆分前后8字节的组,保持和xxd一致的空格分隔
                first_half = hex_groups[:4]
                second_half = hex_groups[4:]
                hex_str = " ".join(first_half)
                if second_half:
                    hex_str += " " + " ".join(second_half)
                
                # 补全空格,确保十六进制部分长度统一(即使不足16字节)
                hex_str = hex_str.ljust(39)
                
                # 处理文本部分:只显示可打印ASCII,不可打印字符用.代替
                text_part = ''
                for b in line:
                    if 32 <= b <= 126:
                        text_part += chr(b)
                    else:
                        text_part += '.'
                
                # 拼接最终输出行
                output = f"{offset:08x}: {hex_str} {text_part}"
                print(output)
                outfile.write(output + '\n')
                offset += 16
except FileNotFoundError:
    print("Input File not found!!")
except Exception as e:
    print(f"An error occurred: {e}")

关键改动说明

  • 十六进制分组调整:
    把原来单个字节拆分的逻辑改成每两个字节为一组,用大写十六进制显示(和xxd保持一致);同时拆分前后8字节的组,保留格式对齐的空格,还处理了文件末尾不足16字节的对齐问题。
  • 文本显示修正:
    替换了原来str(line)的方式,不再显示b''包裹的格式;只输出可打印ASCII字符(范围32-126),像换行符这类不可打印字符统一替换为.,完全匹配xxd的文本显示规则。
  • 细节优化:
    在偏移量的冒号后添加了空格,修正了格式细节;把通用的except改为具体的FileNotFoundError,同时保留其他异常的捕获,避免隐藏未知错误。

运行这个修正后的脚本,输出就会和你期望的xxd格式完全一致了。

内容的提问来源于stack exchange,提问作者Dilshan Lakshitha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:52:46