大家应该都知道的,可我新手,不会vc
还不清楚谁来帮我翻译下?给点
注释的。谢谢。。static
u_short cksum(u_short *addr, int len)
{
register int nleft = len;
register u_short *w = addr;
register u_short answer;
register int sum = 0;
while( nleft > 1 ) {
sum += *w++;
nleft -= 2;
}
if( nleft == 1 ) {
u_short u = 0;
*(u_char *)(&u) = *(u_char *)w ;
sum += u;
}
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return (answer);
}
还不清楚谁来帮我翻译下?给点
注释的。谢谢。。static
u_short cksum(u_short *addr, int len)
{
register int nleft = len;
register u_short *w = addr;
register u_short answer;
register int sum = 0;
while( nleft > 1 ) {
sum += *w++;
nleft -= 2;
}
if( nleft == 1 ) {
u_short u = 0;
*(u_char *)(&u) = *(u_char *)w ;
sum += u;
}
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return (answer);
}
解决方案 »
- 如何实现远程更新数据库?
- 软件问题----在Windows XP SP3下!!!
- 怎麼察看工程文件???
- 怎样实现控件选中后周围出现一个虚线框并可以调大小
- 为什么每次打开database desktop时会有显示directory is busy
- 急寻:谁有Delphi6 Sp2的升级补丁的下载地址。
- 请教!用adoquery实现系统的统计功能!弄了一晚上,快疯了!拜托了!分不够再加,急!
- 怎么判断clientdataset.delta的内容是空的
- 邮件发送问题:(服务器认证)
- 一个小问题,关于QuickReport的
- 一个在大富翁上没人回答的问题
- BOM分解问题----高手給看一看,急死人了
type
TWordArray = Array[0..1] of Word;
var
ChkSum : LongWord;
i : Integer;
begin
ChkSum := 0;
i := 0;
While Size > 1 do 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;
PCardinal = ^Cardinal;
function cksum(addr: PCardinal; len: integer): Cardinal;
var
nleft: integer;
w: PCardinal;
answer: cardinal;
sum: integer;
begin
nleft := len;
w := addr;
sum := 0; while (nleft > 1) do
begin
sum := sum + w^;
Integer(w) := Integer(w) + SizeOf(Cardinal);
nleft := nleft - 2;
end; if(nleft = 1) then
begin
sum := sum + cardinal(w^);
end; sum := sum shr 16 + sum and $ffff;
sum := sum + sum shr 16;
answer := not sum;
result := answer;
end;由可能错误,你测试一下。
var
nleft: integer;
w: PWord;
answer: cardinal;
sum: integer;
begin
nleft := len;
w := addr;
sum := 0; while (nleft > 1) do
begin
sum := sum + w^;
Integer(w) := Integer(w) + SizeOf(Word);
nleft := nleft - 2;
end; if(nleft = 1) then
begin
sum := sum + Word(w^);
end; sum := sum shr 16 + sum and $ffff;
sum := sum + sum shr 16;
answer := not sum;
result := answer;
end;
明白点了。
谢谢两位的支持。
to yrb() :
英雄,我崇拜你,你太负责了。
to cuteant()
哈哈,我昨天还是三个哪,羡慕吧。
可惜的就是水平比你们都烂......
明天揭帖,就把诺贝尔非常感谢奖和诺贝尔非常高兴奖颁给两位大虾。