如何将xxd或hexdump命令的输出保存到普通文件中?
终端直接保存输出的实现方法
完全可以直接通过终端原生操作完成需求,不需要额外开发,基于Shell的输出重定向能力即可实现,常用操作如下:
- 覆盖写入文件:使用
>重定向符,执行命令xxd image.jpg > hex_result.txt,执行后xxd的十六进制输出不会打印在终端,会直接覆盖写入hex_result.txt文件,内容和你在终端看到的完全一致。 - 追加写入文件:如果需要保留目标文件原有内容,将新的输出追加到文件末尾,使用
>>重定向符即可,命令为xxd image.jpg >> hex_result.txt。 - 终端显示+同步存文件:如果需要在终端实时看到输出内容,同时把内容存到文件,用
tee命令实现:xxd image.jpg | tee hex_result.txt;需要追加写入的话加-a参数:xxd image.jpg | tee -a hex_result.txt。 - 保存包含报错的全量输出:如果需要把命令执行的错误信息(比如文件不存在、权限不足的提示)也一起存入文件,在重定向命令后加
2>&1即可,示例:xxd image.jpg > hex_result.txt 2>&1。
小提示:如果不需要xxd默认输出的地址偏移列、右侧ASCII解析列,只需要纯十六进制内容供程序调用,可以加
-p(plain)参数:xxd -p image.jpg > hex_result.txt,输出为连续的纯十六进制字符串,解析成本更低。如果要使用hexdump,逻辑完全一致,替换命令名即可。
程序中集成调用xxd/hexdump的方法
所有支持调用外部系统命令的编程语言,都可以直接集成调用这两个工具,一般有两种实现思路:一是直接调用命令+重定向写文件,后续程序读取文件内容即可;二是直接捕获命令的标准输出到内存,不需要生成临时文件。
以下是几种常见开发语言的最简实现示例:
- Python 实现
import subprocess # 直接捕获xxd输出到内存,无需落地临时文件 cmd_result = subprocess.run( ["xxd", "image.jpg"], capture_output=True, text=True ) hex_content = cmd_result.stdout # 按需写入文件 with open("hex_result.txt", "w", encoding="utf-8") as f: f.write(hex_content)
- C/C++ 实现
#include <stdio.h> int main() { // 打开xxd命令的输出管道 FILE* cmd_fp = popen("xxd image.jpg", "r"); if (cmd_fp == NULL) return -1; char buf[2048]; FILE* out_fp = fopen("hex_result.txt", "w"); // 逐行读取命令输出 while (fgets(buf, sizeof(buf), cmd_fp)) { // 可直接在内存处理buf内容,这里示例写入文件 fputs(buf, out_fp); } pclose(cmd_fp); fclose(out_fp); return 0; }
- Go 实现
package main import ( "os" "os/exec" ) func main() { cmd := exec.Command("xxd", "image.jpg") // 直接绑定命令标准输出到文件对象,自动写入 outFile, _ := os.Create("hex_result.txt") defer outFile.Close() cmd.Stdout = outFile cmd.Run() // 如需捕获输出到内存,直接调用cmd.Output()即可 // hexBytes, _ := cmd.Output() }
内容的提问来源于stack exchange,提问作者Thermal_insulator
相关产品推荐
相关产品推荐

