Allg. swap funktion (byteorder)



  • Hallo leute , ich hab folgende funktion:

    DWORD swap32(DWORD scr){
    
    	DWORD dest;
    	char* ptr = (char*)&scr; 
    	char* ptr2= (char*)&dest;
    
    	//swap
    	ptr2[3]=ptr[0];
    	ptr2[0]=ptr[3];
    	ptr2[1]=ptr[2];
    	ptr2[2]=ptr[1];
    
    	return dest;
    }
    

    diese funktion will ich nun verallgemeiner , das sie bei allen typen mit 4 byte länge funktioniert bspw. bei float..

    oder muss ich eien identische funktion schreiben extra für float?



  • In C++ würde ich da mit Templates anfangen, in C ist das beste, was du machen kannst, mit void-Zeigern zu arbeiten.



  • das problem ist, das ich ein void zeiger zurückgeben müsste

    void* swap(void* dat){};

    dabei müsste ich aber speicehr allokieren.

    GRUND ders retunr Void*: Ich möcht die swap funktion gern so verwenden können

    printf(Float %f,swap(fDATA));
    printf(DWORD %i,swap(dDATA));
    

    notfalls so:

    void swap4(void* pStartAdr){
    
    	BYTE tmp;
    
    	tmp= ((BYTE*)pStartAdr)[0];
    	((BYTE*)pStartAdr)[0]= ((BYTE*)pStartAdr)[3];
    	((BYTE*)pStartAdr)[3]= tmp;
    
    	tmp= ((BYTE*)pStartAdr)[1];
    	((BYTE*)pStartAdr)[1]= ((BYTE*)pStartAdr)[2];
    	((BYTE*)pStartAdr)[2]= tmp;
    
    }
    


  • y := sizeof(datentype) - x - 1
    

Anmelden zum Antworten