Hallo, ich habe folgenden Code in C geschrieben. Und ich weiß nicht wo mein Fehler ist. Wieso ist meine "Ergebnis" nicht wie "erg"? eigenlicht sollen die die gleiche Wert haben. Oder täusche ich mich? ______________________________________________________ #include <stdio.h> #include <stdlib.h> typedef unsigned char int8; typedef short int int16; typedef int int32; void abc(int32 *data, int32 erg); int main(){ int32 datain[2]; datain[0] = 0x322e3000; datain[1] = 0x12345655; int32 *poiter; int32 ergebnis; abc(poiter,ergebnis) printf("main -- ergebnis:%x\n",ergebnis); } void abc(int32 *data, int32 erg){ int16 *ptr1; int16 *ptr2; int32 y = *data; prt1 = (int16*) &y; ptr2 = (int16*) &erg; ptr2[1] = ptr1[0]; ptr2[0] = ptr1[1]; printf("void---erg:%x",erg) } ERGEBNIS void---erg:3000322e main---ergebnis: 8048599 _______________________________________________________ Danke für euere Hilfe Julietta
merkwürdiger Code... und hier kriegt ptr2 die Adresse einer Stackvariablen, das geht nicht gut: ptr2 = (int16*) &erg;
ich denke das ist eine Hausaufgabe 'schreibe eine Funktion die Hi und Lo in einem 32 Bit Wort vertauscht'. Aber das nur Fahrkarten rauskommen liegt z.B. noch daran das abc() nicht mal mit initialisierten Werten versorgt wird.
In dem Code ist so ziemlich alles falsch, was man bei Parameterübergabe nur falsch machen kann. Lies dir in deinem Textbuch den Abschnitt noch einmal durch. Langsam, bedächtig und bei jedem Satz überlegen was dir der Autor sagen will. Wenn du einen Pointer hast, dann hats du erst mal nur eine Variable in der eine Speicheradresse gespeichert werden kann. Damit man mit einer Pointervariablen sinnvoll arbeiten kann, muss der Pointer erstmal auf gültigen Speicher zeigen. Sprich er muss erst mal eine Adresse zugewiesen bekommen.
Also das Problem ist nur,dasss ich 2 32 bit habe. Und ich muss LSB von dem erste 32 bit und MSB von dem zweite 32 bit in eine neue 32 bit kriegen. Habt ihr da einen Vorschlag für mich? Danke für die Antwort Julietta
1 | #define erg(lsb, msb) \
|
2 | (((uint32)(msb)) & 0xFFFF0000UL) | (((uint32)(lsb)) & 0x0000FFFFUL)
|
Oder als Funktion: int32 Stitch( int32 first, int32 scnd ) { return ( first & 0xFFFF ) | ( scnd & 0xFFFF0000 ); } zu verwenden als int32 a; int32 res a = ... res = Stitch( a, 87234 );
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.