c 语言检验和计算方法:
unsigned char CheckSum(unsigned char *uBuff, unsigned char uBuffLen)
{
unsigned char i,uSum=0;
for(i=0;i<uBuffLen;i++)
{
uSum = uSum + uBuff[i];
}
uSum = (~uSum) + 1;
return uSum;
}
C#写的代码:
public static byte CheckNum(byte[] memorySpage)
{
byte uSum = 0;
foreach (byte b in memorySpage)
{
uSum += b;
}
byte i = Convert.ToByte(1);
uSum = (byte)~uSum;
uSum += i;
return uSum;
}
其中c语言开发的用在下位机STM32上面,通过tcp连接上C#开发的上位机,从而在计算校验和的时候数据对不上,其中C语言的校验数据(十六进制):00 00 E3 00 60 19 D2 6D 1C E9 AA BB CC DD 01 51,共16个字节,其中前15个字节用来计算,得出第16个字节即51为校验和,而用C#写的代码计算,得到结果是81,因此求高手帮忙解决看一下本人写的C#的代码,该如何改进?万分感谢
并没有问题,十六进制的 0x51就是十进制的81。 C# 代码的变量名 i 改改就没有什么问题了。
0x51=81,没问题。
NO PROBLEM