//呵呵,采用了笨方法。该函数传入中文字符,则对中文字符相加,并返回相加的值,如果不是中文字符则返回0。
Function UnStrAdd(Str:String):LongWord;
var i,Len:Integer;
j:Word;
begin
ResUlt := 0;
if Str = '' then
Exit;
Len := Length(Str);
if (Len mod 2) <> 0 then
Exit;
For i := 1 to Len div 2 do
begin
j := Word(PLongWord(Str)^);
if j <= $7F7F then
begin
ResUlt := 0;
Exit;
end;
j := (j shl 8) + (j shr 8);
ResUlt := ResUlt + j;
Inc(PWord(Str),1);
end;
end;
哦,明白你的意思了,无论输入什么字符,中文的字符就按中文字符相加,英文字符和数字字符就按英文字符和数字字符相加。
那你试试下面的函数。因为用了PChar参数,所以增加了一个长度参数(len参数是你要相加的字符串长度):
Function StrAdd(Str:PChar;Len:Integer):LongWord;
var i:Integer;
j:Word;
begin
ResUlt := 0;
if Str[1] = #0 then
Exit;
i := 1;
while i <= Len do
begin
j := Word(PLongWord(Str)^);
if j <= $7F7F then
begin
ResUlt := ResUlt + Byte(PLongWord(Str)^);
Inc(PByte(Str),1);
Inc(i);
end
else
begin
j := (j shl 8) + (j shr 8);
ResUlt := ResUlt + j;
Inc(PWord(Str),1);
Inc(i,2);
end;
end;
end;