Probleme mit Char-Zeigern und arrays
-
eine direkte wandlungsfunktion kenne ich nicht.
ich würde erstmal die 4 einzelnen arrays in ein array kopieren und dann die zahl
per atoi bzw strtoul extrahieren.
-
oh, du hast ja hex-zahlen, dann eben strol(mit base=16) anstelle von atoi.
-
atoi??? Hier muss überhaupt nichts gewandelt werden. Die Bytes stehen im Big-Endian-Format in dem Array, das ist je nach Plattform entweder schon ein Integer oder kann durch Umordnen zu einem gemacht werden. Letzteres:
int ergebnis = ARRAY[6] << 24 | ARRAY[7] << 16 | ARRAY[8] << 8 | ARRAY[9];
-
du hast recht, das sind ja gar keine strings die er da hat.
-
Ja vielen Dank!
Mit der Lösung von Bashar funktioniert es super... und hab auch gleich das Problem eines 2er Komplements gelöst.
printf("Vielen Dank an Alle!");
-
Mach dich am besten mal schlau, was es mit diesen Bit-Operatoren (Bitshift nach links, bitweises Oder) auf sich hat (wenn nicht schon geschehen). Du sollst ja keinen Code verwenden, den du nicht verstehst.
-
sowas tue ich sogar...
ganz gut erklärt hier:http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/bitshift.html
shiftet es je um 8bits nahc links, da ja ein char arrayfeld 1 byte (2 nibble, weil 2 hex Zeichen) hat und da ich direkt ein int draus mache checkt er das 2er Kmplement, was vorher bei chars logischerweise nicht der Fall war. Also zumindest grob, habe ichs begriffen --> mit den Einzelheiten spiele ich noch rum!
-
Jetzt hab ich ein Strukturen-Problem!
Habe drei cpp und einen Header.
Eins.cpp werden Werte eingegebn und eine Funktion A() aufgerufen.
Header.h enthält ein paar Feste Werte wie int bla=3; und den Prototypen der Funktion A(). Ebenso wird dort das array unsigned char ARRAY[15] deklariert.
Zwei.cpp enthält dann die ganze Funtkion A(), die das ARRAY mit Daten füllt.
Drei.cpp enthält eine Ausgabe für das ARRAY.Nun bekomme ich Linkerfehler, die mir sagen, dass sämtliche Variablen, die im Header angelet werden, bereits in der drei.obj deklariert wurden. Sobald ich im Header das ARRAY ausklammere bekomm ich nur noch den Fehler, dass eben das ARRAY unbekannt ist (logisch), kommentiere ich eine der andren Variablen aus, bekomme ich den Fehler, das diese Variabel unbekannt ist (logisch) und genau dieselben Linkerfehler mit der .obj! Ich habe keine Schimmer woran das liegt...
-
deklariere
extern int bla;
in einer *.h datei.
und in einer *.c datei, welche die *.h datei kennt, kannst du die variable mit einem sinnvollen startwert initialisieren, in deinem fall wohlbla=3;
-
habe ich probiert... ähnliches/gleiches problem!
Mache ich es genau so, wie du geschrieben hast, kommt die Meldung in der Zwei.cpp, dass die Variable bla keinen Datentyp hat und int angenommen wird... dafür sind die Linkerfehler weg!
Mache ich das extern davor und weise trotzdem Wert im Header zu, kommt wieder der Linkerfehler (halbwegs logisch, nach definiton von extern, die ich erst mal googlen musste)
-
KalrHeinz schrieb:
habe ich probiert... ähnliches/gleiches problem!
dann hast du es falsch probiert.
KalrHeinz schrieb:
Mache ich es genau so, wie du geschrieben hast, kommt die Meldung in der Zwei.cpp, dass die Variable bla keinen Datentyp hat und int angenommen wird... dafür sind die Linkerfehler weg!
klar hat bla nen datentyp, den machst du ja in der *.h datei bekannt.
in Zwei.cpp muss natürlich die *.h datei, in derint bla;
steht, mit include eingebunden werden.
KalrHeinz schrieb:
Mache ich das extern davor und weise trotzdem Wert im Header zu, kommt wieder der Linkerfehler (halbwegs logisch, nach definiton von extern, die ich erst mal
googlen musste)im header wird nix zugewiesen, das machst du in einer *.c datei.
-
edit: extern vergessen.
//bla.h #ifndef BLA_H #define BLA_H extern int bla; #endif
//bla.c #include "bla.h" bla = 3;
//main.c #include "bla.h" ... printf("%d", bla); ...
Ausgabe: 3
-
vllt. hast du auch die include guards vergessen.
-
ja doch schon so gemacht also:
//header.h extern int bla; extern unsigned char ARRAY[15]; //Zwei.cpp #include "header.h" bla=3; ARRAY[1]=0x13; //Beispielehaft
und dann kommt bei bla=3 unbekannter Datentyp!
-
KalrHeinz schrieb:
ja doch schon so gemacht also:
//header.h extern int bla; extern unsigned char ARRAY[15]; //Zwei.cpp #include "header.h" bla=3; ARRAY[1]=0x13; //Beispielehaft
und dann kommt bei bla=3 unbekannter Datentyp!
shit. du hast recht. man muss wohl auch in der *.c datei den datentypen angeben.
also// bla.c #include bla.h int bla = 3;
sorry!
vllt. waren es die include guards, die du vergessen hast?
-
auch nicht ganz, gebe ich in der cpp nochmal int davor an, gibt er mir den Fehler Doppeldeklaration...
Trotzdem Danke... ich werde morgen nochmal schauen, für heute ist Schicht im Schacht!
-
KalrHeinz schrieb:
auch nicht ganz, gebe ich in der cpp nochmal int davor an, gibt er mir den Fehler Doppeldeklaration...
Trotzdem Danke... ich werde morgen nochmal schauen, für heute ist Schicht im Schacht!
daher die frage nach den include-guards ...
-
nein Header.h ist immer mit
#include "Header.h"
dabei. Und im header eben
#pragma once
und dann Variablen...
-
oh, ok.
pragma once als include guard kannte ich noch gar nicht.
-
Funktioniert übrigends immenroch nicht... verstehe es nicht...
keiner Eine Idee? Habe keine 2 gleiche Funktione, keine 2 main oder sowas! in Eins.Cpp wird Funktion aus Zwei.cpp aufgerufen und in zwei.cpp wird eine funktion aus drei.cpp aufgerufen... also auch ablaufreihenfolge ist klar!
Habe nun probiert, die Variablen ganz aus dem Header zu nehmen, weil ein Header für drei cpps, und dann eben die Variablen explizit beim Funktiosnaufruf auch mit zu übergeben, da brachte einen Teilerfolg, aber nicht alle Linkerfehler sind beseitigt!