/// <summary>
/// RLC校验
/// </summary>
/// <param name="writeUncheck"></param>
/// <returns></returns>
public static string CheckSum(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;
}
}
hexTotal = String.Concat(hexByte, hexTotal);
}
return hexTotal;
}
/// <summary>
/// RLC校验(异或 取反 加1<span style="font-family: Arial, Helvetica, sans-serif;">)</span>
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static string CheckSumqy(string hexString)
{
hexString = hexString.Replace(" ", "");
int strLen = hexString.Length / 2;
//16进制转10进制
int y = Convert.ToInt32(hexString.Substring(0, 2), 16);
//异或运算
for (int i = 0; i < strLen - 1; i++)
{
//16进制转10进制
int x = Convert.ToInt32(hexString.Substring((i + 1) * 2, 2), 16);
y ^= x;
}
//十进制转二进制
string fy = Convert.ToString(y, 2);
//二进制取反
string fyf = "";
for (int i = 0; i < fy.Length; i++)
{
if (fy.Substring(i, 1) == "1")
{
fyf += "0";
}
else {
fyf += "1";
}
}
//二进制转换为10进制加1
int LRCx = Convert.ToInt32(fyf, 2) + 1;
//10进制转换为16进制度
string LRC = Convert.ToString(LRCx, 16);
return LRC;
}
/// <summary>
/// 求和 取反 加1
/// </summary>
/// <param name="hexstring"></param>
/// <returns></returns>
public static string CheckSumgz(string hexstring)
{
//压缩替换空格
hexstring = hexstring.Replace(" ", "");
int strLen = hexstring.Length / 2;
//16进制转10进制
int y = Convert.ToInt32(hexstring.Substring(0, 2), 16);
//求和运算
for (int i = 0; i < strLen - 1; i++)
{
//16进制转10进制
int x = Convert.ToInt32(hexstring.Substring((i + 1) * 2, 2), 16);
y += x;
}
int msgint = 255 - y % 256 + 1;
hexstring = Convert.ToString(msgint, 16).ToUpper();
if (hexstring.Length<2)
{
hexstring = "0" + hexstring;
}
return hexstring;
}
TCP/IP通信或串口通信数据校验
最新推荐文章于 2024-08-15 23:15:40 发布