perl - 如何以相反的字节顺序打印变量?

标签 perl pack unpack

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

my $num = 0x5514ddb7;
my $s = pack('I!',$num);
print "$s\n";

它打印为一些不可打印的字符,在十六进制编辑器中它看起来是正确的,但是如何在控制台上读取它?我已经试过了:
print sprintf("%#x\n",$s);

这使得 perl 提示非数字参数,所以我认为 pack 返回一个字符串。任何想法如何基于 0xb7dd1455 在控制台上打印 $num

最佳答案

您需要使用 unpack :

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

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

关于perl - 如何以相反的字节顺序打印变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967230/

相关文章:

javascript - JavaScript 中类似 Python 的解包

perl - 如何防止 Perl 将双反斜杠解释为单反斜杠字符?

perl - 我怎样才能使用map来清理这个Perl代码?

java - Perl、Inline_Java、Java动态加载对象和方法

python - tkinter 按钮不显示

windows - Git for Windows - 防止 .pack 文件日期/时间修改

python - Perl 的 Pack ('V' ) 在 Python 中的功能?

r - 如何从 R 运行带有特定模块的 perl 脚本?

r - 在 R 中解压 rar 文件

Ruby:为什么 unpack ('Q' ) 给出与手动转换不同的结果?