了解Perl中的Pack方法

时间:2014-01-30 01:04:27

标签: perl

我不是Perl程序员,但对我正在研究的Pack方法有一些疑问。我看到以下代码:

$diag_cmd = pack("CCSV", DIAG_SUBSYS_CMD_F, DIAG_SUBSYS_PWRDB, PWRDB_DIAG_PKT_SCRIPT | $processor_select, length($s_part)) . $s_part;

在我的理解中,Pack方法获取一些数据值并将其打包成字节。现在我对上面的代码有一些疑问:

  1. “CCSV”代表什么?
  2. 第三个参数是PWRDB_DIAG_PKT_SCRIPT | $ processor_select其中PWRDB_DIAG_PKT_SCRIPT为2且$ processor_select为0.它将传递给'2'或'0'以及为什么会这样做?
  3. 我认为函数调用在$ diag_cmd = pack(“CCSV”,DIAG_SUBSYS_CMD_F,DIAG_SUBSYS_PWRDB,PWRDB_DIAG_PKT_SCRIPT | $ processor_select,length($ s_part))结束,但还有一些额外的. $s_part。那是什么?
  4. 最后一个参数是长度。它在pack方法中扮演什么角色?

1 个答案:

答案 0 :(得分:2)

  1. http://perldoc.perl.org/functions/pack.html;基本上pack采用格式字符串(在您的情况下为CCSV),告诉它如何将其余参数组合成一个字符串。

  2. |是按位或运算符;它或两个数字(或两个字符串,但这似乎不是你正在做的)一次一点。所以2 | 9是0b0010 | 0b1001是0b1011是11. 2 | 0只是2。

  3. 正如您可以说$x = "a" . "b";ab分配给$x,在这里您要分配pack的结果和另一个字符串变量的串联。

  4. 长度表达式只是其中一个参数;特别是将由模板中的V编码的那个。