如何使用Perl将48十六进制字符串转换为字节?

ron*_*ron 9 perl pack

我有一个十六进制字符串(长度为48个字符),我想用pack函数将其转换为原始字节,以便将其放入Win32的字节向量中.

我如何用Perl做到这一点?

Eug*_*ash 26

my $bytes = pack "H*", $hex;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅perlpacktut.

  • 我讨厌那个教程.为什么它必须如此过于复杂.为什么他们给我的$ s = pack('H2'x 10,map {"3 $ _"}(0..9)); 作为我的($ hex)= unpack('H*',$ mem)的'对面'; 我认真地认为他们喜欢尽可能地卷入事物. (8认同)

Mic*_*man 6

步骤是:

  1. 从字符串中提取十六进制字符对.
  2. 将每对转换为十进制数.
  3. 将数字打包为一个字节.

例如:

use strict;
use warnings;

my $string = 'AA55FF0102040810204080';
my @hex    = ($string =~ /(..)/g);
my @dec    = map { hex($_) } @hex;
my @bytes  = map { pack('C', $_) } @dec;
Run Code Online (Sandbox Code Playgroud)

或者,更紧凑地表达:

use strict;
use warnings;

my $string = 'AA55FF0102040810204080';
my @bytes  = map { pack('C', hex($_)) } ($string =~ /(..)/g);
Run Code Online (Sandbox Code Playgroud)