将下面C++语言版的CRC校验改为C#语言版 谢谢

将下面C++语言版的CRC校验改为C#语言版 谢谢

问题描述:

static unsigned short crc16_update(unsigned short crc, unsigned char a)
{
int i;
crc ^= a;
for (i = 0; i < 8; ++i)
{
if (crc & 1)
{
crc = (crc >> 1) ^ 0xA001;
}
else
{
crc = (crc >> 1);
}
}
return crc;
}

//------------------
static unsigned short getChk(unsigned char * b,int len)
{
unsigned short crc=0xffff;
while(len--)
{
crc=crc16_update(crc,*b++);
}
return crc;
}

 if (crc & 1 != 0)

 static ushort crc16_update(ushort crc, ubyte a)
{
int i;
crc ^= a;
for (i = 0; i < 8; ++i)
{
if (crc & 1)
{
crc = (crc >> 1) ^ 0xA001;
}
else
{
crc = (crc >> 1);
}
}
return crc;
}
//------------------
static ushort getChk(ubyte[] b)
{
int i = 0;
ushort crc=0xffff;
while(len--)
{
crc=crc16_update(crc, b[i++]);
}
return crc;
}