一个C的程序,改写Delphi的问题(100分)

  • 主题发起人 主题发起人 PROSE
  • 开始时间 开始时间
P

PROSE

Unregistered / Unconfirmed
GUEST, unregistred user!
源程序
AddParityChar(BYTE *buffer)
{
int i,len;
long count=0;
len=strlen((char *)buffer);
for (i=0;i<len;i++)
count+=buffer;
buffer[len]=count%16L+'0';
}

在CSDN问C++专家们的结果
这是一个给一个字符串内容加校验和的程序

AddParityChar(BYTE *buffer)
{
int i,len;
long count=0;
len=strlen((char *)buffer);
for (i=0;i<len;i++)
count+=buffer; // 计算校验和
// 但这里的得到的校验和是long型的,有可能超出ASC码所能
// 表示的范围,把它放到这个字符串中,就可能被当作一个乱码

buffer[len]=count%16L+'0';
// 把这个校验和放到一个ASC码所能表示的范围
// count%16(0-15)
// '0' + (0-15)可以知道选择的范围是:
// “0 1 2 3 4 5 6 7 8 9 :;< = > ?”
}

这段程序很可能是用在通讯程序中,发送段把内容字符串的末端加入这样一个校验和,
接收端对这个字符串做同样的计算,然后比较最后一个字符是不是与计算结果一致,
从而知道数据是否完整,是否被篡改。

现在想改写成Delphi的,我传入一个Char数组达到校验的目的,各位高手帮帮忙,我这先谢过了
折磨我一个多月了
 
贴出你的Delphi源码来看看。
 
procedure AddParityChar(var buffer: PChar);
var
i, Len, Count: Integer;
begin
Len := StrLen(buffer);
Count := 0;
for i := 0 to Len - 1 do
begin
Inc(Count, Ord(buffer));
end;
buffer[Len] := Chr((Count mod 16) + Ord('0'));
end;
 
源程序中buffer一定是字符串吗?
如果不是
Len := StrLen(buffer);
这里的Len 就不准确了,必须传递字节长度。
 
后退
顶部