我是一个perl新手,
我可以在Perl中简单地使用64位算术吗?
例如
$operand1 = 0xFFFFFFFFFFFF; # 48 bit value
$operand2 = 0xFFFFFFFFFFFF; # 48 bit value
$Result = $operand1 * $operand2;
Run Code Online (Sandbox Code Playgroud)
在Windows 32位平台上,我必须阅读一些数字,这是意料之外的,可以有99,999,999,999的值,但不多.尝试sprintf("%011d", $myNum)输出溢出:-2147483648.
我无法使用BigInt模块,因为在这种情况下我应该深入更改代码.我无法将格式管理为字符串sprintf("%011s", $numero),因为减号处理不正确.
我该怎么办呢?打包/打包可以提供一些帮助吗?
我正在迭代一组32位十六进制字符串("DEADBEEF","12345678"等),我试图将它们加在一起形成一个32位校验和.假设变量$temp在下面的示例中加载了一些十六进制字符串.
my $temp;
my $checksum;
for (...)
{
#assume $temp is loaded with a new hex string here
my $tempNum = hex ($temp);
$checksum += $tempNum;
$checksum &= 0xFFFFFFFF;
print printf("checksum: %08X",$checksum);
}
Run Code Online (Sandbox Code Playgroud)
前几个值是"7800798C","44444444"和"44444444".输出是:
校验和:7800798C
校验和:BC44BDD0
校验和:FFFFFFFF
校验和:FFFFFFFF
等等..
你可以看到前两个总结是正确的,然后它似乎饱和.我错过了关于Perl变量大小限制的内容吗?
编辑:这是脚本的实际输出(字符串是十六进制字符串,值是该字符串的十进制转换,校验和是结果输出):
string: 7800798C, value: 2013297036, checksum 7800798C string: 44444444, value: 1145324612, checksum BC44BDD0 string: 44444444, value: 1145324612, checksum FFFFFFFF string: 44444444, value: 1145324612, checksum FFFFFFFF string: 78007980, value: 2013297024, checksum FFFFFFFF string: 44444444, value: 1145324612, checksum FFFFFFFF