mikrocontroller.net

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


Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

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

mfg

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Mitte durchschneiden...

Autor: sackgesicht (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau willst du als Ergebnis haben?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ schoaschi

danke

Autor: Umwandler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder so:

unsigned char highbyte, lowbyte = 0;

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

Autor: Dirk Doerr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Vorteile?

Doch, so ist das wesentlich schneller!

Markus_8051

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk Doerr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.