Zum Inhalt springen

Größe einen Char arrays rausfinden.


Net-srac

Empfohlene Beiträge

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. :(:D

Greetz

[ 11. Juli 2001: Beitrag editiert von: FaFo ]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

#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 ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

<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. :(:D

[ 11. Juli 2001: Beitrag editiert von: FaFo ]</STRONG>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...