Zeichen als Dezimalwert in String speichern



  • Hallo,

    Ich hätte da eine Frage. Und zwar muss ich mehrere Steuerzeichen + text in einen String speichern. wie das mit einzelnen steuerzeichen geht habe ich bereits herausgefunden:

    String x = "zzzdatenzzz";
    x[1] = 23;
    x[2] = 54;
    x[3] = 1;
    x[9] = 21;
    ....
    

    Jedes der Steuerzeichen einzeln in den String zu schieben ist ja sehr mühsam, insbesondere wenn es nicht nur 6 sonder mal 50 stück sind.

    Jetzt meine Frage: geht das auch irgendwie einfacher?
    z.B. irgendwie so: String f = '23'+'34'+'12'+"hallo"; (ich weiss, dass das nicht funktioniert)

    mfg
    Rai



  • Hallo

    String x = char(23) + char(54) + "daten" + char(1) + char(21);
    

    Allerdings ist (Ansi)String wie jede andere reine Stringklasse nicht der richtige Container dafür, spätestens bei char(0) ist nämlich Schluß.
    Solche Sachen solltest du lieber binär vertarbeiten, zum Beispiel mit TMemoryStream, je nachdem was mit den Daten noch passieren soll.

    bis bald
    akari



  • Das ganze ding soll dann über einen Socket rausgeschickt werden. eigent sich dafür TMemoryStream??

    Und ja, "0" muss da auch des öfteren mit rein.

    mfg
    Rai



  • Hallo

    Und char(0) ist nämlich das Endzeichen, das bei C-Strings verwendet wird. Damit kommt dann die Auswertung bei verschiedenen C-String basierenden Funktionen durcheinander.

    Ja, TMemoryStream eignet sich grundsätzlich dafür, um auch mit Sockets zusammenzuarbeiten.

    bis bald
    akari



  • Hi, danke für deine Antworten.

    Mit den MomoryStreams komme ich nich nicht ganz klar, aber das hat noch ein bisschen Zeit.

    Jetzt ist aber ien anderes Problem aufgetreten:

    String g=char(225);
    int i = g[1];
    

    Obwohl mit dem debugger eindeutig ein "á" im String steht, so bekommt die Variable i den Wert -31.

    Da bin ich jetzt ein bisschen ratlos.

    mfg
    Rai



  • Hallo

    Du must die Wertebereiche der einzelnen Datentypen beachten. Bei dir konkret bedeuted das, das du zwar einen unsigned Wert von 225 reingibst, der []-Op von AnsiString aber signed zurückgibt. Das braucht dich umgrunde nicht weiter zu stören, die interne Bedeutung ist grundsätzlich diesselbe.
    Wenn du aber unbedingt den unsigned-Wert zurückbekommen willst, must du casten

    int i = reinterpret_cast<unsigned char>(g[1]);
    

    bis bald
    akari



  • Hi, danke für die prompte Antwort.

    Leider funktioniert das nicht:
    [C++ Fehler] Unit1.cpp(133): E2031 Typumwandlung von 'char' nach 'unsigned char' nicht zulässig

    Und ja, ich muss das leider unbedingt mit 225 vergleichen.

    mfg
    Rai



  • Hallo

    mein Fehler, für das Umformen von signed zu unsigned brauchst du natürlich static_cast

    int i = static_cast<unsigned char>(g[1]);
    

    aber nun ist es auch getestet 😉

    bis bald
    akari


Log in to reply