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
相关产品推荐
相关产品推荐

