private string crc(string Buf)
{
ushort r,c,Last;
int i,j,mMod,Len;
char[] XyHex=new char[4];
const string HexNm="0123456789ABCDEF";
Len=Buf.Length;
r = 0x0000;
for(i=0;i<=Len-1;i++)
{
r =Convert.ToUInt16(r ^ Convert.ToUInt16((int)Buf[i]));
for(j=0;i<=7;j++)
{
c=Convert.ToUInt16(r & 0x0001);
r=Convert.ToUInt16(r >> 1);
if(c>0)
r=Convert.ToUInt16(r ^ 0xa001);
}
}
for(i=0;i<=3;i++)
{
XyHex[i] ='0';
}
Last =r;
j=3;
while(Last!=0)
{
mMod =(int)Last % 16;
XyHex[j]=HexNm[mMod];
Last=Convert.ToUInt16(Last / 16);
j--;
}
return XyHex.ToString();
}