4 Bytes auslesen



  • Hallo zusammen,

    ich habe einen Zeiger auf einen Speicherbereich in denen sich Daten befinden.
    An einer bestimmten Stelle steht dann eine 4 Byte große Zahl.
    Wie krieg ich diese Zahk in meine Variable? Mein Problem liegt nicht darin,
    wie ich darauf zugreife, sondern wie ich verhinder, dass er mir zusätzliche Bytes
    ausliest. Wenn ich beispielsweise einen long auslese, mach ich das etwa so:

    void* mem = ...;
    int i = *((int*)mem;
    

    Jetzt hat int ja laut Spezifikation mindestens x Bytes.
    Das Problem ist, dass es auch mehr seien können und er zusätzliche Bytes
    auslesen würde. (Soll also potentiell auf mehreren Plattformen laufen)

    4Byter



  • überprüf doch, wieviel byte dein int hat mit sizeof(int)

    mfg blan



  • und was bringt mir das?

    D.h. ja noch nicht, dass es unter Linux und Windows jeweils identisch
    ist...

    Die einzige Möglichkeit die ich z. Zt. sehe, ist das Zusammenrechnen der
    einzelnen Bytes als char...

    Es gab doch auch einen anderen ein Byte großen Datentyp...
    Wie heißt der nochmal?

    4Byter



  • garantiert 1 Byte groß sind "signed char" und "unsigned char" ("char" ohne Präfix ist eins von den beiden, je nach Compiler). Alle anderen Ganzzahltypen haben lediglich eine definierte Mindestgröße.

    Wenn du wirklich genau 4 Byte lesen willst (unabhängig von der Größe der Datentypen), mußt du schon per Hand und mit char's dort durchsteppen:

    unsigned char* data = mem;
    unsigned long val=0;
    for(int i=0;i<4;++i)
      val=256*val+data[i];
    

    (mit vorzeichenbehafteten Typen wird's ein kleines bischen schwieriger, weil du das Vorzeichen-Bit richtig erkennen und interpretieren mußt)



  • CStoll (off) schrieb:

    garantiert 1 Byte groß sind "signed char" und "unsigned char" ("char" ohne Präfix ist eins von den beiden, je nach Compiler).

    Nope. char ist ein eigenständiger Datentyp. Je nach Compiler gibt es lediglich Unterschiede, ob char negativ Werte haben kann oder eben nicht.


Anmelden zum Antworten