我正在迭代一组 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);
}
前几个值是“7800798C”、“44444444”和“44444444”。输出是:
校验和:7800798C
校验和:BC44BDD0
校验和:FFFFFFFF
校验和:FFFFFFFF
ETC..
正如你所看到的,前两个总和是正确的,然后它似乎饱和了。我是否遗漏了有关 Perl 变量大小限制的内容?
编辑:这是脚本的实际输出(字符串是十六进制字符串,值是该字符串的十进制转换,校验和是结果输出):
字符串:7800798C,值:2013297036,校验和7800798C 字符串:44444444,值:1145324612,校验和BC44BDD0 字符串:44444444,值:1145324612,校验和FFFFFFFF 字符串:44444444,值:1145324612,校验和FFFFFFFF 字符串:78007980,值:2013297024,校验和FFFFFFFF 字符串:44444444,值:1145324612,校验和FFFFFFFF