Hi,
ich habe eine Funktion geschrieben, welche die Bytes eines shorts
tauscht.
Im Prinzip keine große Kunst. Allerdings soll dies auch mit signed Daten
funktionieren. Meine byte swap Funktion sah zu begin so aus:
1 | short swap_bytes(short data)
|
2 | {
|
3 | char low, high;
|
4 |
|
5 | high = (data >> 8) & 0x00FF;
|
6 | low = data & 0x00FF;
|
7 |
|
8 | return (low << 8) + high;
|
9 |
|
10 | }
|
Wenn ich die Funktion zwei mal hintereinander aufrufe,
sollte man meinen, dass man wieder seine Anfangszahl erhält.
Dem ist aber nicht so. Wenn ich z.B. eine "-3" reingebe,
gibt die Funktion mir "-769" zurück. Rufe ich die Funktion nun mit
diesem Ergebnis auf, erhalte ich nicht die erwartete "-3", sondern
"-260".
Deklarier ich das low und high byte aber als unsigned char,
funktioniert es tadellos.
Kann mir jemand erklären wieso sich das so verhält?
Grüße,
Daniel