aswcy815174418 发表于 2021-3-16 19:44

c++怎么写OD中的??通配符

{:1_937:}如题,百度了一会没找到答案
(byte)("??")无果

gchq2005 发表于 2021-3-16 20:00

通配符 当然是自己判断呀,遇到全部通过就是了,,你不会是做 特征码搜索 吧??

小小吴 发表于 2021-3-16 20:03

//----------------------处理特征码----------------------//
    //去除所有空格
    if (!markCode.empty())
    {
      int index = 0;
      while ((index = markCode.find(' ', index)) >= 0)
      {
            markCode.erase(index, 1);
      }
      index = 0;
      while (true)
      {
            //删掉头部通配符
            index = markCode.find("??", index);
            if (index == 0) {
                markCode.erase(index, 2);
            }
            else {
                break;
            }
      }
    }

    //特征码长度不能为单数
    if (markCode.length() % 2 != 0) return 0;

    //特征码长度
    int len = markCode.length() / 2;

    //Sunday算法模板数组的长度
    int nSundayLen = len;

    //将特征码转换成byte型
    BYTE* pMarkCode = new BYTE;
    BYTE* pWildcard = new BYTE;
    for (int i = 0; i < len; i++) {
      string tempStr = markCode.substr(i * 2, 2);
      if (tempStr == "??") {
            pWildcard = 0xFF;
            if (nSundayLen == len) nSundayLen = i;        //记录第一个通配符的索引,该索引越靠后,效率越高
      }
      else {
            pWildcard = 0x00;
      }
      pMarkCode = strtoul(tempStr.c_str(), 0, 16);
    }
    //--------------------------end-------------------------//

aswcy815174418 发表于 2021-3-17 14:07

gchq2005 发表于 2021-3-16 20:00
通配符 当然是自己判断呀,遇到全部通过就是了,,你不会是做 特征码搜索 吧??

就是做特征码搜索,遇到??不知道咋解决,百度了好多

gchq2005 发表于 2021-3-17 19:31

本帖最后由 gchq2005 于 2021-3-17 19:35 编辑

特征码 字符串 转 int 数组 (别转 byte 数组, ),,“??” 判断 转成,0x100,, 不就行了,,

//////////////////////////处理特征码,转为整型数组便搜索//////////////////////////
        for (int i = 0; i < (int)strlen(chFeat); i += 2)
        {
                if (chFeat == '*' || chFeat == '?')
                {
                        Sstr = 0x100;
                }// 通配符标记 0x100
                else {
                        strncpy_s(dest, chFeat + i, 2);
                        Sstr = (strtoul(dest, NULL, 16));
                }
        }
        Mlen = (FileSize == 0) ? strlen(Mstr) : FileSize;
        Slen = strlen(chFeat) / 2; // Sstr[] 数组长度
        /////////////////////////////////////////////////////////////////

chenzhi0660 发表于 2021-3-20 01:06

学习我是认真的

aswcy815174418 发表于 2021-3-22 21:50

gchq2005 发表于 2021-3-17 19:31
特征码 字符串 转 int 数组 (别转 byte 数组, ),,“??” 判断 转成,0x100,, 不就行了,,

///////// ...

{:1_936:}有点难修改,要么你发个测试程序来
页: [1]
查看完整版本: c++怎么写OD中的??通配符