读书人

求高手C转delphi

发布时间: 2013-04-26 16:27:53 作者: rapoo

求高手C转delphi 在线等
unsigned int16 UpdateCrc(unsigned char ch, unsigned int16 *lpwCrc)
{
ch = (ch^(unsigned char)((*lpwCrc) & 0x00FF));
ch = (ch^(ch<<4));

*lpwCrc = (*lpwCrc >> 8)^((unsigned int16)ch << 8)^((unsigned int16)ch<<3)^((unsigned int16)ch>>4);
return(*lpwCrc);
}

void ComputeCrc( char *Data, unsigned int8 Length,unsigned char *TransmitFirst, unsigned char *TransmitSecond)
{
unsigned char chBlock;
unsigned int16 wCrc;

wCrc = 0x6363; // ITU-V.41
do
{
chBlock = *Data++;
UpdateCrc(chBlock, &wCrc);
} while (--Length);

if (CRCType == CRC_B)
wCrc = ~wCrc; // ISO 3309
*TransmitFirst = (unsigned char) (wCrc & 0xFF);
*TransmitSecond = (unsigned char) ((wCrc >> 8) & 0xFF);
}
[解决办法]
没什么吧,都是位运算,自己对着delphi的运算符换就是了
[解决办法]


function updateCrc(ch: byte; lpwCrc: PWord): word;
begin
ch := ch xor (lpwCrc^ and $00FF);
ch := ch xor (ch shl 4);
lpwCrc^ := (lpwCrc^ shr 8) xor (word(ch) shl 8) xor
(word(ch) shl 3) xor (word(ch) shr 4);
result := lpwCrc^;
end;

procedure ComputeCrc(data: PByte; len: byte; var transmitFirst: Byte; var transmitSecond: byte);
var
chBlock: byte;
wCrc: word;
begin
wCrc := $6363;
repeat
chBlock := Data^;
inc(Data);
UpdateCrc(chBlock, @wCrc);
dec(len);
until len <= 0;

transmitFirst := byte(wCrc and $FF);
transmitSecond := byte(wCrc shr 8 and $FF);

end;




是不是这样。

读书人网 >.NET

热点推荐