【发布时间】:2010-12-19 21:49:06
【问题描述】:
我正在对一组 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
等等。
你可以看到前两个总和是正确的,然后它似乎饱和了。我是否遗漏了有关 Perl 变量大小限制的内容?
EDIT:这是脚本的实际输出(字符串是十六进制字符串,值是该字符串的十进制转换,校验和是结果输出):
字符串:7800798C,值:2013297036,校验和7800798C 字符串:44444444,值:1145324612,校验和BC44BDD0 字符串:44444444,值:1145324612,校验和FFFFFFFF 字符串:44444444,值:1145324612,校验和FFFFFFFF 字符串:78007980,值:2013297024,校验和FFFFFFFF 字符串:44444444,值:1145324612,校验和FFFFFFFF【问题讨论】:
-
看起来很奇怪,你能不能也打印 $tempNum in that printf ?
-
此代码不生成校验和。甚至在 Perl 中也没有。 :)
-
@bzlm:我知道这一点 :) 这只是校验和操作的一部分,其余部分似乎没有异常,所以我没有包含它。
-
您能否发布一个实际编译和运行的简短脚本?为什么
for (...)?什么是print printf(...)?