Gast
#310522
hallo wie mache ich am einfachsten aus einer 16bit zahl -> 2 8bit zahlen? mfg
|
Anzeige
|
16bit -> 2x8bit zahl
Gast
#310522
hallo wie mache ich am einfachsten aus einer 16bit zahl -> 2 8bit zahlen? mfg
Gast
#310523
In der Mitte durchschneiden...
Gast
#310524
Was genau willst du als Ergebnis haben?
Gast
#310525
...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!
Gast
#310526
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
Gast
#310527
@ schoaschi danke
Gast
#310528
Oder so: unsigned char highbyte, lowbyte = 0; *((char *) &var_1) = lowbyte; *(((char *) &var_1)+1) = highbyte;
Gast
#310529
@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
Gast
#310530
Keine Vorteile? Doch, so ist das wesentlich schneller! Markus_8051
Gast
#310531
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.
Gast
#310532
@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 Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|