c# 实现LRC校验码函数

来源:百度知道 编辑:UC知道 时间:2024/09/22 13:46:14
c# 实现LRC校验码函数
某命令串为":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就是这样算出来的

这里有一段用C写的程序,有谁能用DELPHI写吗?
static unsigned char LRC(auchMsg,usDataLen)

unsigned char *auchMsg ; /* 要进行计算的消息 */

unsigned short usDataLen ; /* LRC 要处理的字节的数量*/

{ unsigned char uchLRC = 0 ; /* LRC 字节初始化 */

while (usDataLen--) /* 传送消息 */

uchLRC += *auchMsg++ ; /* 累加*/

return ((unsigned char)(-((

byte[] code = { 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1 };
int sum = 0;
foreach (byte b in code)
{
sum += b;
}

sum =sum % 255;//模FF
sum = ~sum + 1;//取反+1
string lrc = Convert.ToString(sum, 16);
sum最后的结果是-5,转成16进制的字符串是fffffffc,因为sum是用int表示的,是32位的。