Modbus LRC 校验方法

 

public static string ConvertLRCCode(string writeUncheck)

{

char[] hexArray = new char[writeUncheck.Length];

hexArray = writeUncheck.ToCharArray();

int decNum = 0, decNumMSB = 0, decNumLSB = 0;

int decByte, decByteTotal = 0;

 

bool msb = true;

 

for (int t = 0; t <= hexArray.GetUpperBound(0); t++)

{

if ((hexArray[t] >= 48) && (hexArray[t] <= 57))

 

decNum = (hexArray[t] - 48);

 

else if ((hexArray[t] >= 65) & (hexArray[t] <= 70))

decNum = 10 + (hexArray[t] - 65);

 

if (msb)

{

decNumMSB = decNum * 16;

msb = false;

}

else

{

decNumLSB = decNum;

msb = true;

}

if (msb)

{

decByte = decNumMSB + decNumLSB;

decByteTotal += decByte;

}

}

 

decByteTotal = (255 - decByteTotal) + 1;

decByteTotal = decByteTotal & 255;

 

int a, b = 0;

 

string hexByte = "", hexTotal = "";

double i;

 

for (i = 0; decByteTotal > 0; i++)

{

b = Convert.ToInt32(System.Math.Pow(16.0, i));

a = decByteTotal % 16;

decByteTotal /= 16;

if (a <= 9)

hexByte = a.ToString();

else

{

switch (a)

{

case 10:

hexByte = "A";

break;

case 11:

hexByte = "B";

break;

case 12:

hexByte = "C";

break;

case 13:

hexByte = "D";

break;

case 14:

hexByte = "E";

break;

case 15:

hexByte = "F";

break;

}

}

//char[] _chars = hexByte.ToCharArray();

//char[] _chars2 = hexTotal.PadLeft(1, '0').ToCharArray();

hexTotal = string.Concat(hexByte, hexTotal);

//hexTotal = Utility.ByteToHexString((byte)_chars[0]) + Utility.ByteToHexString((byte)_chars2[0]);//, hexTotal);

}

char[] _chars = hexTotal.ToCharArray();

hexTotal = Utility.ByteToHexString((byte)_chars[0]) + Utility.ByteToHexString((byte)_chars[1]);//, hexTotal);

return hexTotal;

}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值