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

使用Perl批量解码文件中STRVID开头行的二进制八位组编码数字

STRVID编码行自动化解码方案

你可以直接使用以下两种方案实现文件批量处理,两种方案都完全复用你手动验证过的解码逻辑,保证结果和手动解码一致。


方案1:单行命令(无需额外写脚本,适合小文件快速处理)

直接在终端执行以下命令,将命令中你的待处理文件路径替换为实际文件路径即可,处理后的内容会直接打印在终端:

awk '
/^STRVID:/ {
    enc = $2
    cmd = "echo \"" enc "\" | perl -lpe '\''$_=unpack\"B*\"'\''"
    cmd | getline bin
    close(cmd)
    cmd = "printf \"%x\\n\" \"$((2#" bin "))\""
    cmd | getline hex_raw
    close(cmd)
    dec = ""
    for(i=1; i<=length(hex_raw); i+=2) {
        dec = dec substr(hex_raw, i+1, 1) substr(hex_raw, i, 1)
    }
    print "STRVID: " dec
    next
}
1' 你的待处理文件路径
  • 如果需要将结果保存为新文件,在命令末尾追加 > 处理后文件保存路径 即可
  • 逻辑说明:自动匹配STRVID:开头的行,依次完成二进制转换、十六进制转换、两位一组交换位置的操作,其余行直接原样输出

方案2:纯Perl脚本(适合大文件,性能更高)

频繁调用子shell的单行命令处理大文件速度较慢,你可以使用纯Perl实现的脚本,所有逻辑在单个进程内完成,处理速度更快。

  1. 新建文件decode_strvid.pl,写入以下内容:
#!/usr/bin/perl
use strict;
use warnings;

while (my $line = <>) {
    $line =~ s/\R//g;
    if ($line =~ /^STRVID:\s*(\S+)/) {
        my $enc = $1;
        # 文本转二进制串
        my $bin = unpack("B*", $enc);
        # 二进制转十六进制
        my $hex_raw = sprintf("%x", oct("0b" . $bin));
        # 每两位交换顺序得到最终结果
        my $res = "";
        for (my $i = 0; $i < length($hex_raw); $i += 2) {
            $res .= substr($hex_raw, $i+1, 1) . substr($hex_raw, $i, 1);
        }
        print "STRVID: $res\n";
    } else {
        print "$line\n";
    }
}
  1. 给脚本添加执行权限:
chmod +x decode_strvid.pl
  1. 执行处理:
./decode_strvid.pl 待处理文件路径 > 输出文件路径

结果验证

使用你提供的样例STRVID: SarI3gXp测试,两种方案都会输出正确结果STRVID: 3516279433768507,和手动解码结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:54:19