首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

C语言改成delphi,该如何解决

2012-03-23 
C语言改成delphiC/C++ codeshort crc16_ccitt(const unsigned char *buf, int len){register int counter

C语言改成delphi

C/C++ code
short crc16_ccitt(const unsigned char *buf, int len){      register int counter;      register unsigned short crc = 0;      for( counter = 0; counter < len; counter++)           crc = (crc<<8) ^ crc16tab[((crc>>8) ^ *(char *)buf++)&0x00FF];       return crc;}




Delphi(Pascal) code
function crc16(str: string): Wordvar  i: Integer;  crc : word;begin  for i := 1 to length(str) do  begin  crc :=      ((crc shl 8) and $ffff) xor arrCRC16[(((crc shr 8) and $ffff) xor StrToInt(str[i])) and $00FF];    end;end;


但是 结果竟然错了~~~,不知道哪里错了。。。求解

arrCRC16 是个 Word 类型的16位数组。。。求解。哪里错了

[解决办法]
for循环前crc没有附初值
crc := 0;
[解决办法]
StrToInt(str[i]) 这个也不对吧 似乎应该用 ord(str[i])
[解决办法]
C中是用字符串的ascii码来异或的,而你改的Delphi将字符转成了整型,即字符'1',在C中当成49来处理的,而在Delphi中,转成了1来处理。
将StrToInt(str[i])改成Ord(str[i])试试。
[解决办法]
function crc16(str: pbyte;len : integer): Word
var
i: Integer;
crc : word;
pdata : pbyte;
begin
crc := 0; 
pdata := buf;
for i := 0 to len - 1 do
begin
crc := (crc shl 8) xor crc16tab[ ( (crc shl 8) xor pdata^ ) and $00FF ];
pdata := pbyte(pchar(buf)+ 1);
end;
end;

热点排行