我一直在Perl中遇到这个问题几天了,在搜遍无数的手册页之后,perldocs和google搜索条件过多,希望这里有人能帮我一把。Perl包/解压/转换
我给出了表示十六进制值的两个字符串,即“FFFF”,而不是Perl十六进制数0xFFFF。给定这些字符串中的两个,我希望将它们转换为二进制形式,对这两个字符串执行按位与操作,然后获取此输出并检查每个位从LSB到MSB。
我现在有两个问题;将十六进制字符串转换为十六进制数字,并将位运算的结果移位 。
为十六进制字符串转换为十六进制数,我已经试过这似乎并不下面的方法来工作,当我打印出来检查:
$a = unpack("H*", pack("N*", $a));
$a = sprintf("%H", $a);
使用“打印”检查其中每个都没有显示正确的值,也没有使用'sprintf'要么...
我执行按位AND后发生的第二个问题,我想通过右移1来检查每一位。为了避免前面的问题,我使用了实际的Perl十六进制数字而不是十六进制字符串(0xffff代替“ffff”)。如果我试图向右进行换档如下:
#Convert from hex number to binary number
$a = sprintf("%B", $a);
$b = sprintf("%B", $b);
$temp = pack("B*", $a) & pack("B*", $b);
$output = unpack("B*", $temp);
此时一切正常,并使用“打印”我可以看到的与运算的数值看的权利,但是当我试图转移如下:
$output = pack("B*", $output);
$output = $output >> 1;
$output = unpack("B*", $output);
我得到的结果值是二进制形式,但不正确。
执行此类操作的正确方法是什么?
你是不是指'while($ num >> = 1)'? – mob 2010-07-07 22:25:59
@mobrule:可能,是的。谢谢。 – 2010-07-07 22:30:57
啊谢谢,现在更清楚了 – materiamage 2010-07-08 01:29:14