hexdump输出归档二进制文件十六进制签名倒序的原因咨询
签名倒序现象的根本原因
这个字节反转问题和文件本身的编码、大小端逻辑无关,是无参数调用hexdump命令时的默认输出机制导致的:
- 无附加参数的
hexdump默认不会逐字节打印文件内容,而是以2字节(16位长度)为最小读取单位,将读到的内容按当前主机的原生字节序转换为数值后再输出十六进制结果。目前主流x86、AMD64架构的设备均为小端序,2字节单位内的前后字节会被反转显示,因此原本顺序为1f 8b的gzip文件头,会被错误显示为8b1f。 - 你用
head data.txt看到的签名是正确的,因为data.txt本身是逐字节记录的十六进制文本,没有经过2字节单位的聚合转换步骤。 - 执行
xxd -r data.txt时已经正确还原出了原始的gzip格式文件,后续看到的倒序签名是管道末端hexdump的显示问题,不是还原操作出错,也不是文件本身的字节顺序错误。
验证与解决方式
要获取和标准签名表一致的逐字节十六进制输出,只需要给hexdump加上-C(规范十六进制输出)参数即可,执行命令:
xxd -r data.txt | hexdump -C
输出的文件头部会显示正确的gzip标准签名1f 8b 08,和公开签名规则完全匹配。
补充说明:gzip文件头是按单字节序列定义的固定格式,本身不存在多字节数值的端序转换逻辑,你观察到的类似端序反转的表现,完全是工具默认输出规则带来的误导。
内容的提问来源于stack exchange,提问作者William Torkington
相关产品推荐
相关产品推荐

