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

如何在Linux下将包含ASCII数字0-9的文件转换为对应数值的十六进制文件

问题根因

  • 你使用的$(< input.txt)语法会将整个文件内容加载为shell命令行参数,而系统对命令行参数的长度存在上限(通常为几十MB级别),1.7GB的文件远超出该限制,因此仅能处理文件开头极少量内容,最终输出只有12字节。
  • 现有printf逻辑直接输出字符的ASCII编码对应的十六进制值,没有完成「数字字符→对应数值」的转换,因此输出为0x30这类ASCII编码结果,不符合预期。

解决方案

方案1:Perl逐行处理(推荐,大文件性能最优)

Perl逐行处理不会加载整个文件到内存,适配GB级大文件,几乎所有Linux发行版默认预装Perl环境,单条命令即可完成转换:
如果你需要输出二进制字节流(即每个数字对应1字节的二进制值,如字符0对应二进制字节0x00),使用命令:

perl -pe 's/([0-9])/chr(hex($1))/eg' input.txt > output.txt

如果你需要输出文本形式的十六进制字符串(即每个数字对应2位十六进制文本,如字符0对应文本00),使用命令:

perl -ne 'chomp; print join("", map {sprintf "%02x", $_} split //) . "\n"' input.txt > output.txt

验证方法

你可以用小测试文件快速验证效果:

  1. 新建test.txt,写入测试内容01234567
  2. 执行对应命令后查看输出,即可得到你需要的0x00、0x01 ... 0x07对应结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:03