c++怎么写OD中的??通配符
{:1_937:}如题,百度了一会没找到答案(byte)("??")无果 通配符 当然是自己判断呀,遇到全部通过就是了,,你不会是做 特征码搜索 吧?? //----------------------处理特征码----------------------//
//去除所有空格
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-------------------------//
gchq2005 发表于 2021-3-16 20:00
通配符 当然是自己判断呀,遇到全部通过就是了,,你不会是做 特征码搜索 吧??
就是做特征码搜索,遇到??不知道咋解决,百度了好多 本帖最后由 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[] 数组长度
///////////////////////////////////////////////////////////////// 学习我是认真的 gchq2005 发表于 2021-3-17 19:31
特征码 字符串 转 int 数组 (别转 byte 数组, ),,“??” 判断 转成,0x100,, 不就行了,,
///////// ...
{:1_936:}有点难修改,要么你发个测试程序来
页:
[1]