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)(-((char_uchLRC))) ; }
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
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位的。
- 1 回答
- 0 关注
- 82 浏览
添加回答
举报
0/150
提交
取消