Problem mit Charakter Auswertung



  • Hallo alle zusammen, ich hoffe die Frage ist nicht all zu blöd. Ich lese eine Maschine über eine TCP Socket verbindung aus. Das funzt soweit ganz gut, ich bekomme die Daten mit recv() zurückgegeben und speichere den ganzen Spaß in einem char- Array. Nun mein Problem, die Daten müßen abhängig von der Byte- Position teilweise als 16 Bit INT Werte / 32 Bit Int Werte sowie als CHAR interpretiert werden. Wie kann ich es erreichen das zum Bsp die Bitdarstellung von 4 CHAR werten als ein INT wert Interpretiert wird.
    Gibt es vielleicht noch bei der Socketverbindung etwas anderes das ich die empfangenen Bytes jeweils anders interpretieren kann?

    Vielleicht kann mir ja jemand helfen, vielen Dank im vorraus.



  • Hallo,

    Du musst die Daten casten. Wenn der Puffer als integer interpretiert werden soll,
    dann castest du ihn zu einem integer:

    int *tmp = static_cast<int*>(buf); //wenn buf ein char-array
    tmp[0]; //die ersten vier bytes werden interpretiert
    tmp[1]; //die naechsten vier bytes werden interpretiert
    

    Natuerlich, entspricht tmp[1] nicht buf[1]. Du musst also auf die Puffergroesse
    achten.

    mfg
    v R



  • @vr: reinterpret_cast, nicht static_cast



  • virtuell Realisticer schrieb:

    Du musst die Daten casten. Wenn der Puffer als integer interpretiert werden soll,
    dann castest du ihn zu einem integer:

    int *tmp = static_cast<int*>(buf); //wenn buf ein char-array
    tmp[0]; //die ersten vier bytes werden interpretiert
    tmp[1]; //die naechsten vier bytes werden interpretiert
    

    Natuerlich, entspricht tmp[1] nicht buf[1]. Du musst also auf die Puffergroesse
    achten.

    Ich würde nicht wild rumcasten, denn wenn die endianness nicht stimmt, steht im Zeiger nur Schrott. 😉



  • !static_cast schrieb:

    @vr: reinterpret_cast, nicht static_cast

    Ja, stimmt 🙂

    Ich würde nicht wild rumcasten, denn wenn die endianness nicht stimmt, steht im Zeiger nur Schrott.

    Ist ja mal egal. Er fragte, wie die Daten als integer interpretiert werden
    koennen. Ob die "endianness" stimmen, darum muss er sich schon kuemmern, jenachdem
    auf welchem/n System/en er arbeitet.

    mfg
    v R



  • Danke erstmal für die schnelle Antwort, ich probiere morgen mal mein Glück. Einen schönen Abend noch.


Log in to reply