long als short* interpretieren
-
ich möchte von einer long-variablen die beiden low-bytes haben. hab dazu das teil in einen short-pointer gecastet und dann wieder in einen long gecastet. beim shortpointer hab ich den index 0 angegeben. leider kam dabei das high-byte raus und mit dem index 1 das low byte. wieso nicht andersherum?
Gruß Patrick
-
stichwort: endian
littel und big endian unterscheiden sich dadurch ob das höherwertige byte zuerst oder zuletzt kommt.google mal danach.
-
verzeihung, es ist natürlich anderers herum. mit 0 bekomme ich die low-bytes und mit 1 die high-bytes.
Gruß Patrick
-
Little und Big Endian (von End In) beziehen sich auf die Weise wie etwas gespeichert wird. Auf einem Intel-Rechner (Little Endian) wird das kleine Ende zuerst, 0xABCD also als 0xCD 0xAB gespeichert. Big Endian speichert genau umgekehrt. Windows arbeitet AFAIK nur auf Little Endian. Einige Computer (z.B. RISC) sind sowohl auf Little als auch auf Big Endian einstellbar.
-
also die winapi (jaja ... gehört nich wirklich hier her, aber erklärt doch einiges) implementiert das so (windef.h):
typedef unsigned short WORD; typedef unsigned long DWORD; // aus 2 WORD´s eine DWORD machen #define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16)) // LOWORD extrahieren #define LOWORD(l) ((WORD)(l)) // HIWORD extrahieren #define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
grüsse
[ Dieser Beitrag wurde am 02.04.2003 um 17:21 Uhr von soUrcerer editiert. ]