perl – 为什么我的unpack打印错误的值?

前端之家收集整理的这篇文章主要介绍了perl – 为什么我的unpack打印错误的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我得到错误的答案/值?

它应该打印的正确值是1,21775,4但是我总是得到1,3,0?

my $data = pack ('C*',map hex,split /\s+/,"01 00 00 00 7F 08 03 00 21 04 80 04 FF D7 FB 0C EC 01 44 00 61 1D 00 00 10 3B 00 00 FF D7 FB 0C 00 00 8C 64 00 00 EC 45");

($obj->{Version},$obj->{res1},$obj->{EARFCN},$tmp1,$obj->{res2},$tmp2)=unpack("C C3 v C C V",$data);

$obj->{band} = ($tmp1 & 0xfc) >> 2;
print "\n".$obj->{Version};    # Should print 1
print "\n".$obj->{EARFCN};   # Should print 2175
print "\n".$obj->{band};      # Should print 4. Note: this is the first 6 bits from MSB of $tmp1.
print "\n";

解决方法

调试输出

DB<1> $data = pack ('C*',"01 00 00 00 7F 08 03 00 21 04 80 04 FF D7 FB 0C EC 01 44 00 61 1D 00 00 10 3B 00 00 FF D7 FB 0C 00 00 8C 64 00 00 EC 45")

  DB<2> x unpack("C C3 v C C V",$data)
0  1
1  0
2  0
3  0
4  2175
5  3
6  0
7  75498529

模式C3输出三个无符号字节,而不是长度为三的字符串.

我想你想要a3.见Perldoc pack()

猜你在找的Perl相关文章