Holger Dietze schrieb:
Ulrich =?iso-8859-1?Q?K=FCttler?= ulrich.kuettler@mailbox.tu-dresden.de schrieb:
Ich stelle mir das so vor. Sollte funktionieren, wenn mit Nullen aufgefuellt wird. (Aber soviel ich weiss garantiert das keiner (?))
#define SWAPBYTES(c) (((c)>>8) & ((c)<<8))
s/&/|/
Funktioniert auf einem 32-Bit-System dann aber nur, wenn Du Dich nicht fuer die hoeherwertigen 16 Bits interessierst (da kommen die Bits 8-15 auch hin).
Dieses Problem kann man umgehen, indem die entsprechenden Bits ausgeblendet werden.
#define SWAPBYTES(c) (((c>>8) && 0x000000FF) & ((c<<8)&&0x0000FF00)
F|r 16 Bit Zahlen ein (short ) davor einf|gen um das Ergebnis in eine 16 Bit Zahl zu konvertieren.
Gr|_e Holger
Hallo,
Holger Bourquain bourqu@rcs1.urz.tu-dresden.de schrieb:
#define SWAPBYTES(c) (((c>>8) && 0x000000FF) & ((c<<8)&&0x0000FF00)
Das ist jetzt wohl voellig aus dem Ruder gelaufen. So tut es zwar irgendwas, nur keine Bytes vertauschen.
Zur Klarheit hier eine ordentliche Version (eine andere war irgendwo schon mal aufgeschrieben):
#define SWAPBYTES(c) ((((c) >> 8) & 0377) | (((c) & 0377) << 8))
Das sollte sogar funktionieren, egal ob 16-, 18-, 24-, 32- oder 36-Bit-Prozessor und egal, ob c vorzeichenbehaftet ist oder nicht.
Wenn ich jetzt keinen gravierenden Fehler eingebaut habe, sollten wir dieses Thema abschliessen, denn das ist eher C als Linux.
Holger
lug-dd@mailman.schlittermann.de