Net-srac Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Hi Leutz, gibts es eigentlich auch einen Weg, direkt zu erfahren, wieviel platz in einem Array ausgenutzt sind? Oder läßt sich immer nur die reservierte Größe Abfragen? Oder wenn ihr das nicht wisst, dann vielleicht das. Wiedermal Hexadezimale Zahlen. Also, ich bekomme über ein Socket eine Hexadezimale nachricht. Die erstem beiden Bytes sprechen für die Länge. im Speicher sieht das dann so aus: 39 02 00 00 01 02 39 02 sind in dem fall aber als 0239 HEX gemeint, also 569 byte. wie kann ich wie krieg ich denn das hin, dass er die beiden zahlen sp zusammenrechnet. Also mit diesem hier kann ich mir die Zahlen holen und in einem Char speichern. memcpy(&cSizeByte1, &pBuf[0], 1); /*Länge der Nachricht incl. LOGLIB-Header */ memcpy(&cSizeByte2, &pBuf[1], 1); /*Länge der Nachricht incl. LOGLIB-Header */ Nun brauch ich aber noch ne Umrechnung von Hex in Dez. hoffe ihr versteht mich. Greetz [ 11. Juli 2001: Beitrag editiert von: FaFo ] Zitieren
gugelhupf Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Hi ! Das mit der Arraygrösse versteh ich nicht ;-) Wenn man nicht vorher das ganze Feld mit irgendeinem Identifizierer füllt, hat man glaub ich keine Möglichkeit die genutzte Grösse festzustellen. Füll einfach das Feld mit irgendeinem Sonderzeichen und frag das Feld später einfach nach dem 1. gefunden Zeichen ab. gruß gugel Zitieren
Klotzkopp Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Hallo! An die Länge der Nachricht kommst du mit: pBuf[0] + 256 * pBuf[1] oder *((unsigned short*) pBuf) Letzteres klappt aber nur auf einer LittleEndian-Maschine. Zitieren
Crush Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Die größe eines statischen Arrays kann man nicht abfragen. Deshalb arbeitet der Compiler ja z.B. mit dem DEBUG_NEW. Hier wird im Speicher davor und danach ein bestimmtes Bitmuster gesetzt. Ist dieses nach dem Programmablauf verletzt, so wird das erkannt und der Compiler gibt eine Fehlermeldung aus. Deshalb ist einer der gemeinsten Fehler in einem Programm ja wenn Array-Grenzen überschritten werden. Da kann man manchmal ganz schön lange suchen. Deshalb ist es sinnvoll sich eine Array-Funktion zu schreiben, die Bereichsüberschreitungen kontrolliert und abfängt. Zitieren
Crush Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Methode 1 wäre es jedem Array-Eintrag zusätzlich ein belegt- oder Frei-Bit zu spendieren (Als Bitfelder z.B.) oder diese Bits komplett in eine zweites Array auszulagern. (Es ist natürlich dann schwierig die Änderungen in den 2 Arrays auszugleichen. Am einfachsten wäre es eine "unmögliche" Bit-Kombination festzulegen die einfach nicht im Array vorkommen darf. Dann ist es auch am einfachsten belegte Felder festzustellen. Zitieren
toosten Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 #define MAX=500 int array[MAX]; und schon hast du die größe verfügbar ! Und wieso willst du im programmcode die array-größe abfragen ... die hast du im quelltext doch selber bestimmt ;-) Und falls du das alles mit new machst brauchst du dir doch die größe des array nur zu merken ;-) Zitieren
toosten Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von FaFo: <STRONG> Wiedermal Hexadezimale Zahlen. Also, ich bekomme über ein Socket eine Hexadezimale nachricht. Die erstem beiden Bytes sprechen für die Länge. im Speicher sieht das dann so aus: 39 02 00 00 01 02 39 02 sind in dem fall aber als 0239 HEX gemeint, also 569 byte. wie kann ich wie krieg ich denn das hin, dass er die beiden zahlen sp zusammenrechnet. Also mit diesem hier kann ich mir die Zahlen holen und in einem Char speichern. Nun brauch ich aber noch ne Umrechnung von Hex in Dez. hoffe ihr versteht mich. [ 11. Juli 2001: Beitrag editiert von: FaFo ]</STRONG> Zitieren
Crush Geschrieben 11. Juli 2001 Geschrieben 11. Juli 2001 Also ich hab´s auch nicht so ganz gerafft wie der´s meint. Zuerst dachte ich wegen lesen und Schreiben in Arrays, dann dachte ich den freien Speicher falls Felder belegt sind (unregelmäßig). Und jetzt blicke ich überhaupt nix mehr.... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.