为了账号安全,请及时绑定邮箱和手机立即绑定

能用c#写吗?以下这一段

能用c#写吗?以下这一段

C#
繁花不似锦 2023-01-08 19:11:02

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贡献1813条经验 获得超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位的。

查看完整回答
反对 回复 2023-01-10
  • 1 回答
  • 0 关注
  • 11 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信