Suche Hilfe von Profis (aus 2 mach eine)
-
camper schrieb:
unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, BYTE *bMask, char *szMask) { return dwLen ? equal( (BYTE*)dwAddress, (BYTE*)dwAddress + strlen( szMask ), bMask, _1 == _2 || szChar[ &_2 - bMask ] != 'x' ) ? dwAddress : dwFindPattern( dwAddress + 1, dwLen - 1, bMask, szMask ) : 0; }
come-on lets crypt again ...
... and _1, _2 will fall from heaven at compile timeTaddel schrieb:
Das flag ist etwas seltsam.
Mir gefällt die goto Variante auch viel besser als die mit dem Flag.
-
Ein bisschen Mitarbeit kann man verlangen
#include <cstring> #include <algorithm> #include <boost/lambda/lambda.hpp> unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, const BYTE *bMask, char *szMask) { using boost::lambda::_1; using boost::lambda::_2; using std::equal; using std::strlen; for ( ; dwLen != 0; ++dwAddress, --dwLen ) if ( equal( (BYTE*)dwAddress, (BYTE*)dwAddress + strlen( szMask ), bMask, _1 == _2 || *( szMask + ( &_2 - bMask ) ) != 'x' ) ) return dwAddress; return 0; }
Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.
-
unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.
-
crypt0r schrieb:
unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.
hat auch niemand behauptet.
-
leute seit ihr behindert das ist doch unwartbar
-
camper schrieb:
crypt0r schrieb:
unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.
hat auch niemand behauptet.
achso
camper schrieb:
Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.
-
crypt0r schrieb:
camper schrieb:
crypt0r schrieb:
unnötige funktionsaufrufe zu vermeiden ist nicht immer unsinnig.
hat auch niemand behauptet.
achso
camper schrieb:
Die Aufgabe ist von vornherein unsinnig, und gegebene Code lässt nicht auf eine Übnungsaufgabe schließen.
"Nicht immer" != "Auf jeden Fall"
-
ich will aber nicht extra boost für diesen Code verwenden, da ich nie boost verwende
-
Taddel schrieb:
ich will aber nicht extra boost für diesen Code verwenden, da ich nie boost verwende
Ok.
Hauptsache funzt!
-
unsigned dwFindPattern(unsigned dwAddress, unsigned dwLen, BYTE *bMask, char *szMask) { const BYTE *pData=(BYTE*)dwAddress; const char *szMaske=szMask; BYTE *bMaske=bMask; int i = 0; while(dwLen-i) { switch(*szMaske) { default: if(*szMaske == 'x' && *pData != *bMaske ) break; ++szMaske, ++pData, ++bMaske; continue; case 0: return (unsigned)(dwAddress+i); } i++; pData=(BYTE*)(dwAddress+i),szMaske=szMask,bMaske=bMask; } return 0; }
-
mit einer schleife schrieb:
//removed
nenenene.
für jedes i muss bMask und szMask von vorn durchlaufen werden, wenn der code das gleiche wie der von Taddel machen soll
-
wird mit der Zeile unter i++ erreicht.