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 ;
}
其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 ;
}