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