如何以反向字节顺序打印变量?

jth*_*jth 4 perl unpack pack

我正在尝试将变量$num转换为其反向字节顺序并将其打印出来:

my $num = 0x5514ddb7;
my $s = pack('I!',$num);
print "$s\n";
Run Code Online (Sandbox Code Playgroud)

它打印为一些不可打印的字符,在十六进制编辑器中看起来是正确的,但是如何才能在控制台上读取它?我已经尝试过了:

print sprintf("%#x\n",$s);
Run Code Online (Sandbox Code Playgroud)

这使得perl抱怨非数字参数,所以我认为pack返回一个字符串.任何想法如何0xb7dd1455在控制台上打印出来$num

Kil*_*oth 7

你需要使用unpack:

my $num = 0x5514ddb7;
my $s = pack('I<!',$num);
my $x = unpack('I>!',$s);
printf("%#x\n",$x);
Run Code Online (Sandbox Code Playgroud)

Michael Carman的评论:请注意字节顺序修饰符(<>)需要Perl v5.10 +.对于旧版本的Perl,您必须使用NV 模板.