Как изменить порядок байтов 8-байтовой строки в Perl? - PullRequest
1 голос
/ 06 декабря 2010

Как я могу изменить FF02500000000020 на 20000000005002FF в Perl?

Я могу сделать так:

  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. затем снова объедините две части.

Есть ли простой способ?

Ответы [ 4 ]

5 голосов
/ 06 декабря 2010
print reverse split /(..)/, 'FF02500000000020';

Или, если хотите, в скаляре:

$val = join '', reverse split /(..)/, 'FF02500000000020';
2 голосов
/ 07 декабря 2010

Вот один из способов:

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

Обратите внимание, что это шестнадцатеричные символы в нижнем регистре, поэтому вы можете добавить uc() в начале, если важно сохранить регистр:

$str = uc unpack 'H*', reverse pack 'H*', $str;
0 голосов
/ 06 декабря 2010

Получить данные в (одну) переменную - назовите ее $data. Затем используйте (скаляр) reverse.

print scalar reverse $data;

Или:

my $reversed = reverse $data;
0 голосов
/ 06 декабря 2010

Попробуйте Convert :: Binary :: C.Похоже, он может делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...