gpt4 book ai didi

Perl 打包/解包/移位

转载 作者:行者123 更新时间:2023-12-01 06:48:33 32 4
gpt4 key购买 nike

我在 Perl 中遇到这个问题已经有几天了,在搜索了无数的手册页、perldocs 和谷歌搜索了太多的搜索词之后,希望这里有人能帮助我。

我得到两个表示十六进制值的字符串,即“FFFF”,而不是 Perl 十六进制数 0xFFFF。给定其中两个字符串,我希望将它们转换为二进制形式,对两者执行按位与运算,然后获取此输出并检查从 LSB 到 MSB 的每一位。

我现在有两个问题;将十六进制字符串转换为十六进制数,并移位按位与的结果。

为了将十六进制字符串转换为十六进制数字,我尝试了以下方法,当我将它们打印出来进行检查时,这些方法似乎不起作用:

$a = unpack("H*", pack("N*", $a));

$a = sprintf("%H", $a);

使用“print”检查每一个都没有显示正确的值,使用“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);

此时一切看起来都很好,使用“打印”我可以看到 AND 操作的值看起来正确,但是当我尝试按如下方式移动时:

$output = pack("B*", $output);
$output = $output >> 1;
$output = unpack("B*", $output);

我得到的结果值是二进制形式,但不正确。

执行这种操作的正确方法是什么?

最佳答案

没有所谓的“十六进制数”。数字就是数字,数字的十六进制表示就是 - 表示

只是turn it into a number并使用按位与。

my $num = (hex $a) & (hex $b);
print ($num & 1, "\n") while ($num >>= 1)

关于Perl 打包/解包/移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199161/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com