Codepage437 zu Dezimalzahl/Hex ?



  • Hallo Leute,

    ich habe ein Chararray[2].

    In diesem Chararray sind zwei Zeichen der Codepage437. http://de.wikipedia.org/wiki/Codepage_437

    Mir wurde gesagt, dass ich über C-Style folgende Möglichkeit hätte. Bsp.:

    long *ptr = (long*)chararray[0]
    

    Dies gibt mir den HexWert zurück. Diesen kann ich dann weiterhin aber nicht mit streams verarbeiten.

    Und da ich doch mit C++ arbeiten möchte, ist die Frage, was für eine Möglichkeit gäbe es? Dass ich zumindest einen HexWert oder direkt eine Dezimalzahl habe.

    Danke

    Mit freundlichen Grüßen


  • Mod

    😕 Zeichen sind Zahlen. Da gibt es nichts umzuwandeln.

    Was genau möchtest du erreichen?



  • Erstmal Danke 🙂

    Ich erhalte 42 Bytes Daten über einen Socket.

    Ab der 28 Stelle finden sich zwei aufeinanderfolgende Chars, welche die Größe der Nutzdaten angeben.
    Diese beiden Chars wurden in Payloadsize[2] übergeben.
    Bis hier muss es so laufen.

    Wenn ich die beiden Chars ausgebe erhalte ich ▼M .

    Das Problem ist, dass ich z.B. eine if-Bedingung schreiben muss die besagt.
    Bsp.:

    If( Payloadsize > 100){
    DupDiDup 🙂
    };

    Durch die Hex-Values könnte ich die Dezimalzahl berechnen.


  • Mod

    unsigned short size = Payloadsize[0] << CHAR_BIT + Payloadsize[1];
    

    Gegebenenfalls ist es umgekehrt. Du musst dein eigenes Format kennen, ich kann hingegen nur raten.

    edit: Wenn man es superklugscheißerkorrekt haben will, kann man nicht von 8 Bit chars ausgehen. Daher die 8 oben zu CHAR_BIT geändert.



  • Danke! Die Größe des Bytes besteht auf diesem System aus 8 Bit.

    Aber leider gibt mir deine Methode den falschen Wert aus.
    Der eigentliche Wert den ich gesendet bekomme, ist momentan auf 8027 BYTES
    gefixt. Dies wird sich allerdings ändern.

    Die genaue Größe wäre besser. Hätte ich die Hex-Values, könnte ich dies z.B berechnen, da ich weiß, dass das Big Endian Format auf dem Server besteht.


  • Mod

    Dann stimmt das schlicht und einfach nicht. "▼M" ist 0x1F4D = 8013, was du als Ergebnis meiner Rechnung erhalten haben solltest. 8027 = 0x1F5B, was in deiner Codepage den Zeichen "▼[" entsprechen würde.



  • Erstmal vielen Dank!

    Entschuldigung. Du hast recht. Es werden vom Server bei der Berechnung der Größe paar Bytes übersprungen.

    Also ist die Größe der Nutzdaten vom Server doch richtig, sprich 8013.
    Aber dennoch gibt er mir eine kleinere Größe aus.

    unsigned short size = Payloadsize[0] << CHAR_BIT + Payloadsize[1];
    

    Jedoch werden hier 8 Bit benutzt.

    Fällt jemanden sonst eine Möglichkeit ein?

    Danke


  • Mod

    Es würde sehr stark helfen, wenn du auch immer sagen würdest, was genau passiert.


Anmelden zum Antworten