Suche Hilfe von Profis (aus 2 mach eine)
-
camper schrieb:
...
-
Taddel schrieb:
ich habe hier 2 Funktion und will eine daraus machen.
Die bDataCompare Funktion würde ich gerne auflösen und den Code in dwFindPattern haben.Warum solltest du das wollen? Eine große Funktion ist schlechter lesbar (und daher schlechter wartbar, swerer zu verstehen usw.) als zwei kleine.
-
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; }
-
Tachyon schrieb:
camper schrieb:
...
clear second-system tendency
-
hallo,
erstmal vielen Dank an camper und mast0r.
camper bei deinem 1. Code ist aber eine struct und eine operatorüberladung dabei, das sollte aber ganz normal gelöst werden, also ohne dies und der 2. ist zu schwer. mast0r den Code teste ich morgen aber bist du sicher dass das klappt? Das flag ist etwas seltsam
-
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.