Ich versuch's so:
1 | char3 = int32>>24; |
2 | char2 = int32>>16; |
3 | char1 = int32>>8; |
4 | char0 = int32; |
Da kommt leider Müll raus. Liegt hier ein systematischer Fehler vor?
|
Forum: Compiler & IDEs int32_t in Bytes zerlegenIch versuch's so:
Da kommt leider Müll raus. Liegt hier ein systematischer Fehler vor? 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)... so eventuell typedef union _INT32_VAL { char Buffer[4]; INT32 IntWert; } INT32_VAL; 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.
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 :-) 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.. 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)). 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. > 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? 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. 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.
|
|