Swap Funktion.



  • Hallo Leute, hab folgedne Swap Funktion gecoded:

    void SpezSwapDWord(DWORD &dwWord){
    		DWORD dwTmp= dwWord;
    		((BYTE*)&dwWord)[3]=((BYTE*)&dwTmp)[0];
    		((BYTE*)&dwWord)[2]=((BYTE*)&dwTmp)[1];
    		((BYTE*)&dwWord)[1]=((BYTE*)&dwTmp)[3];
    		((BYTE*)&dwWord)[0]=((BYTE*)&dwTmp)[2];
    	}
    

    wie man sieht ist es keine gewöhnlicher tausch von der Byteorder..

    könnte man das noch eleganter machen? denke schon^^



  • Soll da 'ne Vorschrift zu erkennen sein, oder meinst du rein syntaktisch was Eleganteres? Glaube nicht, das man das besser machen kann ..



  • BorisDieKlinge schrieb:

    könnte man das noch eleganter machen? denke schon^^

    so (einigermassen portabel jedenfalls):

    #define HTONL(n) (((unsigned long)(n) << 24) | \
                      ((((unsigned long)(n) & 0xff00)) << 8) | \
                      ((((unsigned long)(n) & 0xff0000)) >> 8) | \
                      ((unsigned long)(n) >> 24))
    ...
    // dreh um und zeig an  
    printf ("%08lx\n", HTONL(0x12345678));
    ...
    

    BorisDieKlinge schrieb:

    void SpezSwapDWord(DWORD &dwWord)
    

    den adressoperator kann man nicht im funktionskopf anwenden
    🙂



  • Hi Bruder !
    Check this out:
    DWORD dw = 0xAABBCCDD;
    printf ("%X",dw<<24|(dw&0xFF0000)>>8|(dw&0xFF00)<<8|dw>>24);

    Die Masken kannst du dir ja anpassen.



  • dwX= dwX<<24 | (dwX& 0xFF00)<<8 | (dwX&0x00FF0000)>>16 | (dwX&0xFF000000)>>24;
    


  • fricky schrieb:

    den adressoperator kann man nicht im funktionskopf anwenden
    🙂

    Adressoperator? Das ist 'ne Referenz! 😉



  • Was soll das sein? Und jetzt komm mir nicht mit C++, erklär es mir in ANSI C.



  • was soll was sein?



  • Mit Inlineassembler gehts so:

    DWORD XSwapDWord(DWORD& dwWord)
    {
    	_asm	mov	 ecx, dwWord
    	_asm    mov     eax, [ecx]
    	_asm    xchg    al, ah
    	_asm    rol     eax, 16
    	_asm	mov     [ecx], eax
    }
    

    😉



  • hardrocker schrieb:

    Was soll das sein? Und jetzt komm mir nicht mit C++, erklär es mir in ANSI C.

    Sorry, habe übersehen das wir im ANSI C sind! Falsches Forum! 😮



  • ja freunde, hab die funktion in c++ geschrieben, deswegen geht das mit der referenz... mach das ding das nächte mal ins c++ froum;)



  • Huch schrieb:

    fricky schrieb:

    den adressoperator kann man nicht im funktionskopf anwenden
    🙂

    Adressoperator? Das ist 'ne Referenz! 😉

    nö, das ist ein syntax-error. referenz wäre so:

    void SpezSwapDWord(DWORD *dwWord)
    

    also ein pointer
    🙂


Log in to reply