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