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

c语言检验和计算方法:unsignedcharCheckSum(unsignedchar*uBuff,unsignedcharuBuffLen){unsignedchar... 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#的代码,该如何改进?万分感谢
展开
 我来答
百度网友5298263
2017-03-01 · TA获得超过968个赞
知道小有建树答主
回答量:1005
采纳率:94%
帮助的人:530万
展开全部
应该没问题

c得出的51其实是0x51
c#得出81是十进制的,其实也等于0x51
然后,c#也能uSum = (~uSum) + 1;这么写 不需要那么多格式转换
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式