网上其他的累加校验和基本都是返回最后一字节的byte,而我的需求则是最后两字节,接下来就看看怎么实现吧
int cks = 0;
foreach (byte item in data)
{
cks = (cks + item) % 0xffff ;
}
data[data.Length - 2] = (byte)((cks & 0xff00) >> 8);//取校验和高8位
data[data.Length - 1] = (byte)(cks & 0xff);//低8位
其中data是一个byte[],先累加到int cks变量,取余0xffff保证不会溢出,然后移位相与,取出高八位和低八位,放到最后
如果是需要返回一个uint16,则将两个byte放入一个byte数组,然后执行BitConverter.ToInt16()方法即可返回一个UInt16。