C语言改成delphi,该如何解决
C语言改成delphi
但是 结果竟然错了~~~,不知道哪里错了。。。求解
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;
- 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): Word var 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;