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

如何用Unix命令或Tcl过程将32位十六进制转为每行1位二进制?

32位十六进制转逐行LSB优先二进制的实现方案

下面提供两种实现方式:Unix命令行组合工具方案,以及Tcl脚本过程方案。

Unix命令行方案

可以通过awk、tr、rev和fold工具组合完成需求,执行以下命令即可:

awk '{printf "%032s\n", substr("00000000000000000000000000000000" strtonum("0x"$1), length(strtonum("0x"$1))*4+1)}' input.txt | tr ' ' '0' | rev | fold -w1 > output.txt

各工具作用说明:

  • awk:将每行十六进制转为十进制,再格式化为32位宽度的二进制字符串(不足位补前导空格)
  • tr ' ' '0':把二进制字符串中的空格替换为0,确保生成完整的32位0/1序列
  • rev:反转二进制字符串,将原数的最低有效位(LSB)移到首位
  • fold -w1:将每个二进制字符拆分为单独一行
  • 最后通过>将结果写入目标输出文件

Tcl脚本方案

编写Tcl过程处理文件,逻辑清晰且易于调整:

proc hex_to_lsb_lines {input_file output_file} {
    set in_fd [open $input_file r]
    set out_fd [open $output_file w]

    while {[gets $in_fd hex_line] != -1} {
        set hex_line [string trim $hex_line]
        if {$hex_line eq ""} {
            continue
        }
        # 十六进制转十进制,再格式化为32位二进制字符串(MSB在前)
        set decimal_val [expr {0x$hex_line}]
        set msb_first_bin [format "%032b" $decimal_val]
        # 反转字符串得到LSB在前的序列
        set lsb_first_bin [string reverse $msb_first_bin]
        # 逐位写入输出文件
        foreach bit [split $lsb_first_bin ""] {
            puts $out_fd $bit
        }
    }

    close $in_fd
    close $out_fd
}

# 调用示例:处理input.txt,输出到output.txt
# hex_to_lsb_lines "input.txt" "output.txt"

过程说明:

  • 打开输入和输出文件句柄,逐行读取十六进制数据
  • 跳过空行,将有效十六进制字符串转为十进制后,格式化为32位二进制
  • 反转二进制字符串调整为LSB优先顺序
  • 拆分每个二进制位,逐行写入输出文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:35:23