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

求高手C转delphi

2013-04-26 
求高手C转delphi 在线等unsigned int16 UpdateCrc(unsigned char ch, unsigned int16 *lpwCrc){ch (ch^(

求高手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;




是不是这样。 

热点排行