Forum: Mikrocontroller und Digitale Elektronik 16bit -> 2x8bit zahl


von josef (Gast)


Lesenswert?

hallo

wie mache ich am einfachsten aus einer 16bit zahl -> 2 8bit zahlen?

mfg

von johnny.m (Gast)


Lesenswert?

In der Mitte durchschneiden...

von sackgesicht (Gast)


Lesenswert?

Was genau willst du als Ergebnis haben?

von johnny.m (Gast)


Lesenswert?

...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!

von Schoaschi (Gast)


Lesenswert?

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

von josef (Gast)


Lesenswert?

@ schoaschi

danke

von Umwandler (Gast)


Lesenswert?

Oder so:

unsigned char highbyte, lowbyte = 0;

*((char *) &var_1) = lowbyte;
*(((char *) &var_1)+1) = highbyte;

von Dirk Doerr (Gast)


Lesenswert?

@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

von Markus_8051 (Gast)


Lesenswert?

Keine Vorteile?

Doch, so ist das wesentlich schneller!

Markus_8051

von Profi (Gast)


Lesenswert?

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.

von Dirk Doerr (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.