我一直在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