hallo wie mache ich am einfachsten aus einer 16bit zahl -> 2 8bit zahlen? mfg
...Und vor allem: Mit welchen Mitteln soll das geschehen (Welche Programmiersprache, denn ich denke mal, dass die Frage im Zusammenhang mit Programmierung steht?!?)? Ohne die Information ist eine (sinnvolle) Beantwortung der Frage nicht möglich!
Entweder du arbeitest mit Unionen oder du machst es mit einer UND-Verknüpfungen und dann schieben. int16 var16; int8 var81; //lower Byte int8 var82; //higher Byte var81 = var16&0xff; var82 = (var16>>8)&0xff; mfg Schoasch
Oder so: unsigned char highbyte, lowbyte = 0; *((char *) &var_1) = lowbyte; *(((char *) &var_1)+1) = highbyte;
@Umwandler
> Oder so:
Besser nicht.
Dein Code hängt von der CPU-Architektur ab, der von Schoaschi nicht. So
etwas sollte man vermeiden, da es auch keine Vorteile bringt.
Gruß
Dirk
void main(void){ union {uint i;uchar c[2];}a16; a16.i=0x1234; printf("\r\n%3x %3x",a16.c[1],a16.c[0]); } Reihenfolge hängt von Architektur ab, aber die sollte ja bekannt sein.
@Markus_8051 >Keine Vorteile? > Doch, so ist das wesentlich schneller! Ok, geb ich zu. Das war etwas unüberlegt. > Reihenfolge hängt von Architektur ab, aber die sollte ja bekannt > sein Stimmt sicherlich für ein aktuelles Projekt. Wenn Du so etwas aber in Module einbaust, die Du oder ein anderer später für eine andere Arch. weiterverwendet gibt's Probleme. Besonders wenn man es nicht erwartet weil man z. B. von einer ARM-Arch zu einer anderen wechselt. Wenn man trotzdem den Geschwindigkeitsvorteil (ich geb's ja zu ;-) nutzen will könnte man konsequent Macros einsetzen So in etwa #define LO_BYTE(a) *((unsigned char *)&(a)) #define HI_BYTE(a) *(((unsigned char *)&(a))+1) oder so ähnlich Viele Grüße Dirk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.