Archief - C++ code explan needed [simple]

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

L0|2|23

Legacy Member
hey,
ik moet hier iets ontcijferen, de onderstaande code

PHP:
    unsigned char cdk[]
    unsigned long   eax,
                         edx,
                         edi,
                         i;          // counter


    eax = 3;
    ptr = cdk;
    for(i = 0; i < 12; i++, ptr++) {
        edi = eax << 1;
        edx = *ptr - 0x30;      // char '0'
        edx ^= edi;
        eax += edx;
    }
    eax %= 10;
    eax -= *ptr

ik heb basic knoweldge van C++ en VB, en snap het meeste wel maar had het graag eens gehoord van een echte kenner, want ik denk dat ik het niet helemaal juist heb :p

het werkt dus met hex, en die "<<" neemt een soort kleinere waarde (ik heb de beschrijving ervan al gelezen), maar dan is edx = *ptr - 0x30 ,dat snap ik toch niet zo goed en %= ook niet :)

alvast bedankt

[IpL]Viper_666

Legacy Member
Die '<<' is een bit-shift operator. stel nu een getal in binair
00000011 als ge dat naar links bit-shift, dan wordt da
00000110 wat in dit geval groter wordt. (rechts is (int)/2)

De '%' operator dient om een modulo te nemen (rest bij deling)
bvb 5 % 2 = 1 Voor die %= moet je denken aan bvb +=

Voor die 'edx = *ptr - 0x30' : als ge boven in de code kijkt dan
zal je zien dat ptr het adress is van de tabel cdk.
Vandaar dat er in die for lus ptr++ staat, om telkens een cel in die
tabel op te schuiven. Als ge *ptr zet dan vraagt ge de inhoud van
de cel waarin ge u nu bevind (aangezien telkens het adres verhoogt)
Wat in *ptr zit is een char en daar kan je een adere char van aftrekken
in dit geval 0x30, wat overeenkomt met '\0' (stopcaracter voor strings)


Kvind btw da systeem van da adres verhogen om een tabel te doorlopen
een heel slechte manier van coderen, omda ge zo het beginadres van uw
tabel kwijtzijt. Derbij in die for-lus kunde even goe cdk ipv
*ptr en ptr++ gebruiken want die i wordt toch ook geïncrementeerd.

Khoop da ge ewa verder staat nu.

UNdestrucTABLE

Legacy Member
sinds wanneer wordt er assembler achtige code in c geschreven??? :angry:

[IpL]Viper_666

Legacy Member
UNdestrucTABLE zei:
sinds wanneer wordt er assembler achtige code in c geschreven??? :angry:
Da gaat zonder problemen ze ;)

In dees stuk code doen de namen van de variabelen
nogal denken aan ASM registers moet ik toegeven.

Voor de rest is da allemaal ANSI-C...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan