当前位置:编程学习 > C#/ASP.NET >>

将C++代码转换位C#,请各位大虾帮忙

第一个是CRC16校验方法,是在第二个方法中调用的
ushort crc_16(ushort crc,ushort b)
{
    crc = crc ^ (ushort) b << 8;
    for (ushort i= 0; i < 8; i++) {
        if ((crc & 0x8000) == 0x8000)
            crc = crc << 1 ^ 0x1021;
        else
            crc = crc << 1;
    }

    return crc & 0xffff;
}


QByteArray HDLCDec(QByteArray recvbuf){
    QByteArray result = recvbuf;
    result.clear();
    unsigned char val;
    int cnt = recvbuf.size();
    //qDebug()<<recvbuf;
    for(int i = 0; i < cnt; i++){
        val = recvbuf.at(i);
        //qDebug("the value of forcode %d",val);
        if(val == 0x7e) {
            continue;
        }
        if(val == 0x7d){
            i++;
            val = recvbuf.at(i) ^ 0x20;;
        }
        //qDebug("the value of decode %d",val);
        result.append((char) val);
    }
    //qDebug()<<result;
    if(result.size()<= 2)
    {
        result.clear();
        return result;
    }
    ushort crc = 0, recvcrc = 0;
    cnt = result.size()-2;
    for(int i = 0; i < cnt; i++) {
        crc = crc_16(crc, (ushort) result.at(i));
    }
    recvcrc = (((ushort)result.at(cnt))<<8)&0xff00;
    recvcrc |= ((ushort)result.at(cnt+1))&0x00ff;
    qDebug()<<crc<<"  "<<recvcrc<<"the crc";
    if(crc != recvcrc){
        qDebug("we have wrong crc");
        result.clear();
    }
    else{
        result.resize(cnt);
    }
    return result;
} --------------------编程问答-------------------- ushort crc_16(ushort crc,ushort b)
{
  crc = crc ^ (ushort) b << 8;
  for (ushort i= 0; i < 8; i++) {
  if ((crc & 0x8000) == 0x8000)
  crc = crc << 1 ^ 0x1021;
  else
  crc = crc << 1;
  }

  return crc & 0xffff;
}
c# 与c++代码差的不是太多
        ushort crc_16(ushort crc, ushort b)
        {
            crc = (ushort)(crc ^ (ushort)b << 8);
            for (ushort i = 0; i < 8; i++)
            {
                if ((crc & 0x8000) == 0x8000)
                    crc = (ushort)(crc << 1 ^ 0x1021);
                else
                    crc = (ushort)(crc << 1);
            }

            return (ushort)(crc & 0xffff);
        } --------------------编程问答--------------------

 ushort crc_16(ushort crc, ushort b)
  {
  crc = (ushort)(crc ^ (ushort)b << 8);
  for (ushort i = 0; i < 8; i++)
  {
  if ((crc & 0x8000) == 0x8000)
  crc = (ushort)(crc << 1 ^ 0x1021);
  else
  crc = (ushort)(crc << 1);
  }

  return (ushort)(crc & 0xffff);
  }
--------------------编程问答--------------------


        List<byte> HDLCDec(List<byte> recvbuf)
        {

            List<byte> result = recvbuf;
            result.Clear();
            //unsigned char val;
            byte val;
            int cnt = recvbuf.Count;
            //qDebug()<<recvbuf;
            for (int i = 0; i < cnt; i++)
            {
                val = recvbuf[i];
                //qDebug("the value of forcode %d",val);
                if (val == 0x7e)
                {
                    continue;
                }
                if (val == 0x7d)
                {
                    i++;
                    val = (byte)(recvbuf[i] ^ 0x20); ;
                }
                //qDebug("the value of decode %d",val);
                result.Add((byte)val);
            }
            //qDebug()<<result;
            if (result.Count <= 2)
            {
                result.Clear();
                return result;
            }
            ushort crc = 0, recvcrc = 0;
            cnt = result.Count - 2;
            for (int i = 0; i < cnt; i++)
            {
                crc = crc_16(crc, (ushort)result[i]);
            }
            recvcrc = (ushort)((((ushort)result[cnt]) << 8) & 0xff00);
            recvcrc |= (ushort)(((ushort)result[cnt + 1]) & 0x00ff);
            Console.WriteLine();// qDebug() << crc << " " << recvcrc << "the crc";
            if (crc != recvcrc)
            {
                Console.WriteLine("we have wrong crc");
                result.Clear();
            }
            else
            {
                result = new List<byte>();
            }
            return result;
        }

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,