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

如何无需Python,优雅输出文件的原始二进制表示?

无Python依赖的文件纯二进制字符串输出方法

需求是直接输出文件的纯二进制表示(每个字节转换为8位二进制字符,无任何偏移、注释或额外格式),比如对内容为This is some text的文件a.txt,要得到连续的01串。目前用Python可以实现,但希望找到不依赖Python的更简洁方案——xxd的-p参数能输出纯十六进制,但-b(二进制输出)和-p不兼容,hexdump也没有直接的纯二进制输出选项。

以下是几种可行的无Python方案:

方案1:使用od + awk

od可以输出文件的字节数值,配合awk将每个数值转为8位二进制:

od -An -vtu1 a.txt | awk '{for(i=1;i<=NF;i++) printf "%08d", strtonum("0x" $i)}'
  • od -An -vtu1:-An隐藏地址列,-v显示所有重复字节(不省略),-tu1以无符号单字节格式输出每个字节的十进制值
  • awk遍历每个十进制值,转成8位二进制并拼接输出

方案2:使用hexdump + awk

先让hexdump输出每行一个字节的十六进制,再用awk转成二进制:

hexdump -v -e '/1 "%02X\n"' a.txt | awk '{printf "%08d", strtonum("0x" $0)}'
  • hexdump -v -e '/1 "%02X\n"':-v不省略重复行,-e指定格式,每个字节输出为两位十六进制后换行
  • awk将每行的十六进制转为8位二进制并拼接

方案3:纯Bash实现(无需额外工具)

利用Bash的内置命令处理,适合没有od/hexdump的环境:

while IFS= read -r -n1 byte; do
    printf "%08d" "$(( $(printf '%d' "'$byte") ))"
done < a.txt
  • read -r -n1每次读取一个字节
  • printf '%d' "'$byte"将字符转为对应的ASCII/字节值
  • printf "%08d"将数值格式化为8位二进制字符串

验证

以上方案的输出结果均与Python命令的输出一致,比如对a.txt会输出:

0101010001101000011010010111001100100000011010010111001100100000011100110110111101101101011001010010000001110100011001010111100001110100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:21