X
xnewmoon
Unregistered / Unconfirmed
GUEST, unregistred user!
function CheckSum(Var Buffer;
Size : integer) : Word;
type
TWordArray = Array[0..1] of Word;
var
ChkSum : LongWord;
i : Integer;
begin
ChkSum := 0;
i := 0;
While Size > 1do
begin
ChkSum := ChkSum + TWordArray(Buffer);
inc(i);
Size := Size - SizeOf(Word);
end;
if Size=1 then
ChkSum := ChkSum + Byte(TWordArray(Buffer));
ChkSum := (ChkSum shr 16) + (ChkSum and $FFFF);
ChkSum := ChkSum + (Chksum shr 16);
Result := Word(ChkSum);
end;
TWordArray = Array[0..1] of Word;
TwordArray 定义为两个Word型数组,因此其下标不能大于 1 。
但是在CheckSum这个函数中却可以大于1,本人经过调试发现在下标大于1的情况下,也没有报越界错误(我在工程 =》选项=》Compiler=》Range Checking 已选中)。
请高手明示。
Size : integer) : Word;
type
TWordArray = Array[0..1] of Word;
var
ChkSum : LongWord;
i : Integer;
begin
ChkSum := 0;
i := 0;
While Size > 1do
begin
ChkSum := ChkSum + TWordArray(Buffer);
inc(i);
Size := Size - SizeOf(Word);
end;
if Size=1 then
ChkSum := ChkSum + Byte(TWordArray(Buffer));
ChkSum := (ChkSum shr 16) + (ChkSum and $FFFF);
ChkSum := ChkSum + (Chksum shr 16);
Result := Word(ChkSum);
end;
TWordArray = Array[0..1] of Word;
TwordArray 定义为两个Word型数组,因此其下标不能大于 1 。
但是在CheckSum这个函数中却可以大于1,本人经过调试发现在下标大于1的情况下,也没有报越界错误(我在工程 =》选项=》Compiler=》Range Checking 已选中)。
请高手明示。