32 ビットの 16 進数文字列 ("DEADBEEF"、"12345678" など) のセットを反復処理しており、それらを合計して 32 ビットのチェックサムを形成しようとしています。$temp
以下の例では、変数が何らかの 16 進文字列でロードされていると仮定します。
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
等..
ご覧のとおり、最初の 2 つの合計は正しく、その後飽和しているように見えます。Perl 変数のサイズ制限に関して何か不足していますか?
EDIT : これはスクリプトからの実際の出力です (文字列は 16 進文字列、値はその文字列の 10 進数変換、チェックサムは結果の出力です):
文字列: 7800798C、値: 2013297036、チェックサム 7800798C 文字列: 44444444、値: 1145324612、チェックサム BC44BDD0 文字列: 44444444、値: 1145324612、チェックサム FFFFFFFF 文字列: 44444444、値: 1145324612、チェックサム FFFFFFFF 文字列: 78007980、値: 2013297024、チェックサム FFFFFFFF 文字列: 44444444、値: 1145324612、チェックサム FFFFFFFF