delphi lrc 校验怎么计算?(200分)

  • 主题发起人 主题发起人 zjf870
  • 开始时间 开始时间
Z

zjf870

Unregistered / Unconfirmed
GUEST, unregistred user!
  某命令串为":010200000001FC"
  其16进制为“3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A”。其中第一个为起始符,2-13为数据,14-15即“FC”为LRC校验码,有人能写一个取得校验位的函数吗?
下边有一段用VC写的程序
将帧的内容,除去头代码,用十六进制表示,求和,模FF,然后取补码,以ASCII码表示即可。
  例如:ASCII帧
   3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A
  将校验内容用十六进制表示为:
   00 01 00 02 00 00 00 00 00 00 00 01
  将以上数值用十六进制求和,模FF:
   00+01+00+02+00+00+00+00+00+00+00+01=04=0000 0100
  取反:1111 1011
  加1: 1111 1100
  十六进制变换:F C
  ASCII码:46 43
  LRC就是这样算出来的

/********************************************
效验码
函 数 名:GetLRC
功 能:计算效验码LRC
入 参:cDataForLRC—要效验的字符串;

cLRC—效验码;iLen—要效验的字节数
出 参:cLRC—效验码
返 回 值:无;

*********************************************/
void GetLRC(char *cDataForLRC, char *cLRC,int iLen)
{
*cLRC=0x00;

for(DWORD i=0;i<(unsigned)iLen;i++)
*cLRC=*cLRC^cDataForLRC;

return ;

}
 
后退
顶部