求高手解析一下一段C语言的校验和代码转成C#后的问题

xiaoheigongsi 2017-03-01 09:52:17
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#的代码,该如何改进?万分感谢
...全文
159 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-03-02
  • 打赏
  • 举报
回复
一个是加1 一个是i uSum = (~uSum) + 1; uSum = (byte)~uSum; uSum += i;
dceacho 2017-03-01
  • 打赏
  • 举报
回复

public static byte CheckNum(byte[] memorySpage)//你肯定是吧16个字节都传给参数了
{
byte uSum = 0;
foreach (byte b in memorySpage)
{
uSum += b;
}
byte i = Convert.ToByte(1);
uSum = (byte)~uSum;
uSum += i;
return uSum;
}
dceacho 2017-03-01
  • 打赏
  • 举报
回复

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧