mehrdimensinale Arrays mit verschiedenen Datentypen je dim
-
ich hab hier die saubere und unsaubere version gepostet:)
Ja hackt auf mir rum, nur weil ich helfen will.... tzzz

-
BorisDieKlinge schrieb:
ich hab hier die saubere und unsaubere version gepostet:)
Okay, übersehen.
ABER: Warum zur Hölle noch die Unsaubere nachschieben? Muss das wirklich sein?cu André
-
ne musste nich sein...ich bin grad bischen am C coden, und da extrahiere ich werte mit best. typen aus rohdaten bytes... da kamm mir das in sinn..
deswegen auch meine darauf folgende Frage ob die länge von datentypen in ANSI C fest sind?? Ob es da zu keinem undefinierten verhalten kommt?
-
BorisDieKlinge schrieb:
deswegen auch meine darauf folgende Frage ob die länge von datentypen in ANSI C fest sind??
Nein, die Länge von Datentypen in ANSI C und ANSI C++ ist nicht festgelegt. Das einzige was zu den Längen festgeschrieben ist, wie die Größe der unterschiedlichen Datentypes zueinander ist.
Meist ist das in einer Form wie dieser angegeben: char <= int <= long
Wie du daraus schon Ablesen kannst ist auch diese Größenuntergliederung nicht unbedingt wirklich aussagekräftig. In der Regel kann man davon ausgehen das int unter 32 Bit Umgebungen auch 32 Bit groß ist, und unter 64 Bit Umgebungen eben 64 Bit. Aber soviel ich weiß ist selbst das nicht zwingend festgeschrieben.
cu André
-
hmm ok..
würde ich jetzt :
#pragma pack(1) struct test{ int A; float B; char C; } test; #pragma pop()machen.
würde nund bei sizeof(test); bei winXP, win 3.11 und Vista unterschiedliche länge nraus kommen?
-
BorisDieKlinge schrieb:
würde nund bei sizeof(test); bei winXP, win 3.11 und Vista unterschiedliche länge nraus kommen?
Es könnten auch unterschiedliche Längen bei MSVC, gcc und Borland rauskommen...
-
hmm , und wie geht ich mit folgender problematik um?
Ich lese Roh daten von einer SPS... die SPS hat ja feste Datentyp längen
REAL 32bit
char 8bit
WORD 16bit
DWORD 32Bitetc.
nun spiegel ich einen best speicehr bereich der SPS als Byte sequenz..
welche ich ja jetzt in ein struct spiegeln kann. Da aber nie sicher gegeben ist das die längen eindeutig lang sind, könnte das ja auf unterschiedlichen OS probleme geben odeR?
-
Ja, könnte es. Aber die systemspezifischen Typen wie WORD oder REAL werden idR so definiert, daß die Größe exakt stimmt (zumindest bei den Compilern, die sie anbieten). D.h. wenn der Compiler WORD versteht, steckt dahinter ein 2 Byte großer Ganzzahltyp.
PS: "char" ist der einzige Datentyp, bei dem der Standard die Größe auf 1 Byte festlegt - ABER er erlaubt den Compilern immer noch, Bytes mit mehr als 8 Bit zu definieren.
-
Normalerweise bietet jeder Compiler spezielle Typedefs oder Schlüsselwörter um Typen fester Größe anzugeben.
Beim MSVC kannst du __int8, __int16, __int32, __int64 benutzen und wenn du es portabel haben willst, dann bietet dir z.B. boost einheitliche typedefs.
Wobei du das auch leicht selbst hinbekommen kannst mit Hilfe von configure.
-
Es gibt auch im Standard Typen mit fester Größe (int32_t, uint16_t ...) - jedoch sind die meisten davon leider optional.