下面的代码是从其他语言翻译过来的,调试不报错,但是一传值进去,进程就死了.各位大侠帮我看看拉
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();
}

解决方案 »

  1.   

    把其他语言代码贴出来crc16?crc32?
      

  2.   

    // 右移算法
        public string CRC(byte [] bs)
        {
          ushort checksum = 0;
          for (int i = 0; i < bs.Length; i++)
          {
            checksum ^= bs[i];
            for (int j = 0; j < 8; j++)
            {
              bool b = ((checksum & (ushort)1) == 1);
              checksum >>= 1;
              if(b) checksum ^= 0xA001;       //1010 0000 0000 0001
            }
          }
          return checksum.ToString("X4");
        }