www.mikrocontroller.net

Forum: Compiler & IDEs int32_t in Bytes zerlegen


Autor: wanda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuch's so:
char3 = int32>>24;
char2 = int32>>16;
char1 = int32>>8;
char0 = int32;

Da kommt leider Müll raus. Liegt hier ein systematischer Fehler vor?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehrere Fehler auf einmal:
a) mangelnder Quelltext
b) miese Fehlerbeschreibung
c) kein vorheriger Versuch, das Problem selbst zu
   lösen - ca. einmal pro Tag darf sich hier jemand die
   Mühe machen und jemandem sagen, daß man a) mit
   unvollständigen Quelltexten nichts anfangen kann,
   und b) ohne ordentliche Fehlerbeschreibung nicht helfen
   kann ("es geht nicht, sagt mir warum"), und c) erst
   mal die 156742 Threads lesen kann, in denen beschrieben
   wird, wie man Variablen in Byte splitten kann und
   umgekehrt und in denen steht, daß man a)...

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so eventuell

typedef union _INT32_VAL
{
    char Buffer[4];
    INT32 IntWert;
} INT32_VAL;

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das macht aber nicht das selbe wie im 1. posting ...

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte es dass?

>>>>>   int32_t in Bytes zerlegen

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, es ist schwer, allgemein zu sagen, was das erste Posting macht, 
denn da es einen signed Typ verwendet, ist das Ergebnis 
compilerabhängig.  Sagen wir mal so:  Es kann sein, dass die Union 
dasselbe macht wie das erste Posting, muss aber nicht.

> Das macht aber nicht das selbe wie im 1. posting ...

So allgemein ist das nicht richtig.

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den Trick mit der Union machst, fällst du bei Wechsel der 
Endianness auf die Schnauze, und das ist noch nicht mal compilerabhängig 
:-)

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne fällst du nicht weil hier nur zerlegt wird und nicht interpretiert 
!!!
Du musst schon wissen was die bytes bedeuten ob float,int etc..

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Buffer[0] enthält bei Big/Little Endian das selbe ... ojemine ...

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau 1 byte :-)

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du programmierst unter Windows, oder?

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nee

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du programmierst gar nicht?

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kommst zu der Annahme?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon ist Endianess sowas von typisch compilerabhängiger 
Eigenschaft (dass der sie wiederum von der Prozessorarchitektur 
ableitet, ist ein anderes Thema (und es gibt auch gemischte 
Architekturen)).

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wanda schrieb:
> Ich versuch's so:
> char3 = int32>>24;
> char2 = int32>>16;
> char1 = int32>>8;
> char0 = int32;
>
> Da kommt leider Müll raus. Liegt hier ein systematischer Fehler vor?

Ja.

Autor: Zwie Blum (zwieblum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Abgesehen davon ist Endianess sowas von typisch compilerabhängiger
> Eigenschaft (dass der sie wiederum von der Prozessorarchitektur
> ableitet, ist ein anderes Thema (und es gibt auch gemischte
> Architekturen)).

Aha. Wenn du in Assembler programmierst hast du also keine Endianess 
mehr, oder doch, oder was genau jetzt?

Autor: wanda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Tipp mit der union hatte ich auch ausprobiert, bis auf die 
Problematik der endianess sollten beide Methoden dasselbe Ergebnis 
haben. Der Fehler (Muell) wird also an anderer Stelle verursacht . 
Danke.

Autor: Gerhard M. (ggcode)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das glaub ich weniger .....

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ooooch. Glaub ich sofort.

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.