2017-03-04 17 views
0

我有这个工作Perl可以支持4张十六进制数在另外4个十六进制换交换128个字节十六进制到其他订单

perl -wMstrict -le '  
    my @bits = unpack "(A1)16", sprintf "%016b", hex shift; 
    my $bitmap = "D5679123C4EF80AB"; 

    @bits = @bits[ map { hex } split //, $bitmap ]; 
    $"="";  

    print sprintf "%04X", oct "[email protected]";  
' "B455" 

结果:CB15

请如何支持像128多个字节字节?

以及如何使用此perl从file.txt中读取十六进制?

在此先感谢。

+0

仍需要帮助,请 –

+0

你能提供一个样本represetentative输入文件,该位映象,和预期的输出? – 2017-03-04 20:22:23

+0

你在问我们编写代码,但这是无关紧要的。无论如何,我们可能会这样做,除非您甚至不指定您希望我们编写的代码应该做什么!你只是想把'16'的实例改为'1024'(128字节的位数)? – ikegami

回答

0

你可以尝试以下方法:

use feature qw(say); 
use strict; 
use warnings; 

# Example with 64 bits 
my $data = 'B455AB10A1230000'; # original data (64 bits) 
my @bits = map { unpack '(A)*', sprintf '%08b', hex } unpack '(A2)*', $data; 
my @bitmap = reverse 0..63; # some 64 bits map, replace with your actual data 

my $result = unpack "H*", pack 'C*', map { oct "0b$_" } unpack "(A8)*", join '', @bits[@bitmap]; 

say "Input : $data"; 
say "Result: $result"; 

输出

Input : B455AB10A1230000 
Result: 0000c48508d5aa2d 
相关问题