Perl 如何从pack函数打印结果?
我喜欢验证pack的功能。我有下面的代码来尝试一下Perl 如何从pack函数打印结果?,perl,Perl,我喜欢验证pack的功能。我有下面的代码来尝试一下 $bits = pack 'N','134744072'; 如何打印位 我做了以下工作: printf ("bits = %032b \n", $bits); 但它不起作用 谢谢 如果需要数字的二进制表示,请使用 my $num = 134744072; printf("bits = %032b\n", $num); 如果需要字节字符串的二进制表示,请使用 my $bytes = pack('N', 134744072); prin
$bits = pack 'N','134744072';
如何打印位
我做了以下工作:
printf ("bits = %032b \n", $bits);
但它不起作用
谢谢 如果需要数字的二进制表示,请使用
my $num = 134744072;
printf("bits = %032b\n", $num);
如果需要字节字符串的二进制表示,请使用
my $bytes = pack('N', 134744072);
printf("bits = %s\n", unpack('B*', $bytes));
如果需要数字的二进制表示,请使用
my $num = 134744072;
printf("bits = %032b\n", $num);
如果需要字节字符串的二进制表示,请使用
my $bytes = pack('N', 134744072);
printf("bits = %s\n", unpack('B*', $bytes));
模块(Perl附带)允许您检查变量的Perl表示形式。在处理二进制数据而不是可打印的字符串时,这可能比原始的打印更有用
#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek qw(Dump);
my $bits = pack 'N','134744072';
Dump($bits);
产生如下输出:
SV = PV(0xaedb20) at 0xb15650
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xb06630 "\10\10\10\10"\0
CUR = 4
LEN = 10
开头的“SV”表示这是“标量值”的转储(与数组或散列值相反)
“SV=PV”表示该标量包含一个字节字符串(与整数或浮点值相反)
“PV=0xb06630”是指向这些字节所在位置的指针
“\10\10\10\10”\0可能是您感兴趣的部分。双引号字符串表示构成该字符串内容的字节。
在字符串中,您通常会看到字节被解释为ASCII,因此字节65十进制将显示为“A”。所有不可打印的字符都以八进制显示,前面有一个\
因此,$bits
变量包含4个字节,每个八进制'10'为十六进制0x08
LEN和CUR告诉您,Perl分配了10个字节的存储空间,目前正在使用其中的4个字节(因此length($bits)
将返回4)。模块(Perl附带)允许您检查Perl对变量的表示。在处理二进制数据而不是可打印的字符串时,这可能比原始的打印更有用
#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek qw(Dump);
my $bits = pack 'N','134744072';
Dump($bits);
产生如下输出:
SV = PV(0xaedb20) at 0xb15650
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xb06630 "\10\10\10\10"\0
CUR = 4
LEN = 10
开头的“SV”表示这是“标量值”的转储(与数组或散列值相反)
“SV=PV”表示该标量包含一个字节字符串(与整数或浮点值相反)
“PV=0xb06630”是指向这些字节所在位置的指针
“\10\10\10\10”\0可能是您感兴趣的部分。双引号字符串表示构成该字符串内容的字节。
在字符串中,您通常会看到字节被解释为ASCII,因此字节65十进制将显示为“A”。所有不可打印的字符都以八进制显示,前面有一个\
因此,$bits
变量包含4个字节,每个八进制'10'为十六进制0x08
LEN和CUR告诉您Perl分配了10个字节的存储空间,目前正在使用其中的4个(因此length($bits)
将返回4)。在解包之前检查$bytes中的内容是什么?您想检查什么?如果要检查它是否包含(可能是)一个字节字符串,可以使用$bytes=~/^[\x00-\xFF]*\z/
在解包之前,我喜欢以$bytes打印内容。非常感谢!!要打印$bytes
中的字节,请使用打印$fh$bytes代码>我试图理解这个语句“join.”、解包“C4”、打包“N”、移位“一块一块地做什么。非常感谢你的帮助!!是否要在解包之前检查$bytes中的内容?要检查什么?如果要检查它是否包含(可能是)一个字节字符串,可以使用$bytes=~/^[\x00-\xFF]*\z/
在解包之前,我喜欢以$bytes打印内容。非常感谢!!要打印$bytes
中的字节,请使用打印$fh$bytes代码>我试图理解这个语句“join.”、解包“C4”、打包“N”、移位“一块一块地做什么。非常感谢你的帮助!!哇,多么糟糕的打印方式,$bits代码>Dump
是查看OP不感兴趣的内部结构。我确信您知道,Perl格言之一是“有多种方法可以做到这一点”。我正好演示了这一点——一种方法。研究替代方法并评估其相对优点具有指导意义。另外,您如何知道OP(或者其他阅读问题的人)对Perl的内部结构不感兴趣?这并不意味着所有方法都是平等的。你选择了一个非常混乱的,并且用不必要的信息使读者负担过重,并且不总是提供正确的结果(例如,对于魔法变形金刚)。您甚至没有提到在打印多个字符串时要查看哪个字符串(例如,对于UTF8=1的VAR)。您似乎决心要选择一场战斗。我从来没有声称所有的方法都是平等的。我确实特别提到了要在示例中查看的字符串,这正是OP应该看到的。这个例子没有涉及一系列的代码点,所以我没有提到例子中没有提到的UTF8版本。关于“你似乎决心要挑起一场战斗”,我不认为我的评论攻击了你的答案有任何疑问。//关于“我从未声称所有的方法都是平等的”,我感到困惑。你是说你同意我最初的评论吗?听起来确实不是这样。哇,这是多么糟糕的打印方式,$bits代码>Dump
是查看OP不感兴趣的内部结构。我确信您知道,Perl格言之一是“有多种方法可以做到这一点”。我正好演示了这一点——一种方法。研究替代方法并评估其相对优点具有指导意义。另外,您如何知道OP(或者其他阅读问题的人)对Perl的内部结构不感兴趣?这并不意味着所有方法都是平等的。您选择了一个非常混乱的,并且用不必要的信息使读者过载,并且不总是提供cor