如何在Perl中反转8字节字符串的字节顺序?

时间:2010-12-06 19:37:06

标签: perl

如何在Perl中将FF02500000000020更改为20000000005002FF?

我能做的是:

  1. 将FF02500000000020分为两部分FF025000和00000020
  2. 在他们之前添加0x;
  3. 然后

    my $num2=0xFF025000;  
    my $num3=0x00000020;  
    my $s2=pack('I!',$num2);  
    my $s3=pack('I!',$num3);  
    print unpack ("H*", "$s2") . "\n";  
    print unpack ("H*", "$s3") . "\n";
    
  4. 然后再将两部分组合在一起。

  5. 有简单的方法吗?

4 个答案:

答案 0 :(得分:5)

print reverse split /(..)/, 'FF02500000000020';

或者,如果你喜欢标量:

$val = join '', reverse split /(..)/, 'FF02500000000020';

答案 1 :(得分:2)

这是一种方式:

$str = unpack 'H*', reverse pack 'H*', $str;

请注意,这会将十六进制字符小写,因此如果保留案例很重要,您可能希望在开头添加uc()

$str = uc unpack 'H*', reverse pack 'H*', $str;

答案 2 :(得分:0)

尝试转换::二进制:: C。看起来它可能会做你想要的。

答案 3 :(得分:0)

将数据转换为(单个)变量 - 将其称为$data。然后使用(标量)reverse

print scalar reverse $data;

或者:

my $reversed = reverse $data;