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

Perl实现读取文件十六进制值并写入二进制值至另一文件

Perl十六进制转8位二进制文件的实现方案

你需要把每行十六进制字符串转换成8位二进制字符串写入新文件,现有代码只是复制内容,我们可以通过Perl的hex()和sprintf()函数实现转换,以下是修改后的完整代码:

#!/usr/bin/perl
use strict;
use warnings;

my $input_file = 'C:\Users\john\Desktop\input.txt';
my $output_file = 'C:\Users\john\Desktop\output.txt';

open(my $input_fh, "<:encoding(UTF-8)", $input_file) or die "无法打开输入文件: $!";
open(my $output_fh, ">", $output_file) or die "无法打开输出文件: $!";

while (my $line = <$input_fh>) {
    chomp $line;
    # 清理行首尾空白,跳过空行
    $line =~ s/^\s+|\s+$//g;
    next unless $line;

    # 验证十六进制格式,避免无效输入
    if ($line !~ /^[0-9A-Fa-f]+$/) {
        warn "跳过无效十六进制行: '$line'\n";
        next;
    }

    # 十六进制转十进制,再格式化为8位二进制
    my $binary_str = sprintf("%08b", hex($line));
    
    print $output_fh "$binary_str\n";
}

close $input_fh;
close $output_fh;

print "转换完成,输出路径: $output_file\n";

关键代码说明

  • 十六进制转数值:hex($line)将输入的十六进制字符串(如1C、0A)直接转换为十进制整数,这是Perl内置的进制转换函数。
  • 生成8位二进制字符串:sprintf("%08b", $decimal)是核心转换逻辑:
    • %b指定输出二进制格式
    • 08强制输出长度为8,不足的位用前导零填充,确保每行都是标准的8位二进制
  • 输入校验:添加了空白清理和格式验证,避免空行或无效字符导致程序报错,同时用warn提示异常行,不中断整个转换流程。
  • 文件处理:输入文件以UTF-8编码打开,兼容可能的特殊空白字符;输出文件直接写入文本即可,因为二进制字符串是纯ASCII内容。

验证示例

输入行1C(十六进制)→ 转换为十进制28 → 格式化为8位二进制00011100
输入行0A → 十进制10 → 二进制00001010
输入行89 → 十进制137 → 二进制10001001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:45:29