如何解压 "pairwise reversed" 订单 BA DC 中的字节?

How to unpack bytes in "pairwise reversed" order BA DC?

我有一个二进制字符串,其中字节按以下方式反转:该文件包含例如四个字节 0x18 0xb1 0x35 0x41 并且应该在我的 perl 字符串或数组中解释为 0xb1 0x18 0x41 0x35。也就是每一对字节都颠倒过来。

如何使用 unpack 解压这种格式?

我也想知道这种packing/format是不是标准的,有名字吗?如果我使用了错误的术语,我深表歉意,我不习惯字节级操作。

这对我有用:

unpack( 'SS', $bytes );

所以你有 "\x18\xb1\x35\x41..." 并且你想要 "\xb1\x18\x41\x35..."

$s =~ s/(.)(.)//sg;
my $out = $in =~ s/(.)(.)//srg;
my $out = pack "n*", unpack "v*", $in;
my $out = pack "C*", unpack "(xCXXCx)*", $in;

... 或包含 0xb1, 0x18, 0x41, 0x35, ....

的数组
my @out = unpack "C*", $in =~ s/(.)(.)//srg;
my @out = unpack "C*", pack "n*", unpack "v*", $in;
my @out = map { $_ >> 8, $_ & 0xFF } unpack "v*", $in;
my @out = unpack "(xCXXCx)*", $in;