BYTE Buf[12];
Buf[0] = 0x7e;
Buf[1] = 0x00;
Buf[2] = 0x0b;
Buf[3] = 0x01;
Buf[4] = 0x7d;
Buf[5] = 0x5e;
Buf[6] = 0x2a;
Buf[7] = 0x01;
Buf[8] = 0x7d;
Buf[9] = 0xde;
Buf[10] = 0x01;
Buf[11] = 0x7f;
...
要求删掉其中的0x7d;
最后变成
Buf[0] = 0x7e;
Buf[1] = 0x00;
Buf[2] = 0x0b;
Buf[3] = 0x01;
Buf[4] = 0x5e;
Buf[5] = 0x2a;
Buf[6] = 0x01;
Buf[7] = 0xde;
Buf[8] = 0x01;
Buf[9] = 0x7f;

解决方案 »

  1.   

    从前向后搜索,找到一个0x7d就把后面数据memmove一位覆盖掉0x7d.
      

  2.   


    BYTE* pBuf = new BYTE[nCount];if(pBuf != NULL)
    {
    memset(pBuf, 0, nCount);
    }
    else
    {
    return;
    }
     int nPos = 0;
    for(int i = 0; i < nCount; i++)
    {
    if(Buf[i] != 0x7d)
    {
    pBuf[i]= Buf[i];
    nPos++;
    }
    }
    memset(Buf, 0, nCount);
    memcpy(Buf, pBuf, nPos);//这时候,最后出来的nPos为处理后的字符个数。
    //Buf经过处理以后,已经没有了0x7d;
      

  3.   

    上面写错了一句,正确的如下:这个好办啊。
    int nCount = 12;//这个nCount需要赋值进去,不能用C语言风格的函数,比如sizeof或者其他的strlen都会计算失败
    BYTE* pBuf = new BYTE[nCount];if(pBuf != NULL)
    {
    memset(pBuf, 0, nCount);
    }
    else
    {
    return;
    }
     int nPos = 0;
    for(int i = 0; i < nCount; i++)
    {
    if(Buf[i] != 0x7d)
    {
    pBuf[nPos++]= Buf[i];
    }
    }
    memset(Buf, 0, nCount);
    memcpy(Buf, pBuf, nPos);//这时候,最后出来的nPos为处理后的字符个数。
    //Buf经过处理以后,已经没有了0x7d;
      

  4.   

    1.数据范围可以预计并存储空间不是问题的话,标准的hash,用位图处理,时间复杂度在0(N)
    2.数据范围很大,如楼上所说,这是一个排序的过程,去掉重复的即可,时间复杂度在O(N*LOGN)