String to Hex konvertieren?



  • Hallo Forum,
    kann man einen String der eine Zahl darstellt, in seinen Hex wert umwandeln???
    Falls ja, welch Funktion ist das, sollte für Unicode tauglich sein?
    Z.B.:
    Der String als Zahl hat den Wert "9826" und sein Hexwert ist dann: 2662

    danke
    pixel



  • Du kannst den String in einen Int-Wert umwandeln (in der C++-FAQ stehen einige Methoden, wie das geht) und dann als Hexadezimal ausgeben.

    (btw, wie rechnest du denn? 9826 = 0x2662)



  • Geht das nicht auch mit sscanf und "%x"?
    Bin mir da aber nicht genau sicher.



  • Hallo CStoll,
    hab mich verschrieben weil ich viele Werte vor mir hatte, sorry Forum! 🤡 😞

    Es geht um darum das diese als Zeichen dargestellt werden sollen, eine Möglichkein ist direkt einen Wert zu zuweisen CString csStr = L"2665"; !
    Wenn ich eine ganze Zeile habe die mit solchen Wertern ergenzt werden soll, da hab ich ein Problem, so was:

    CString csStr = L"Das soll ein Herz werden: ♥";
    csStr.Replace(L"&#9829", L"\x2665"); // <-- das funktioniert
    AfxMessageBox(csStr); // <-- ok!
    

    Aber über eine .............??!
    So soll das gehen müssen:
    Ich lese den String ein, und extrachiere alle &#xxxx; aus und daraus die Nummer,
    ok, diese verwndle ich dann in ein hex Wert:

    // cs ist Extract von ♥ , hat jetzt den wert "9829"
    iCharHex = _wtoi(cs); // in Zahl umwandeln..
    _itow(iCharHex, hexn, 16); // in Hexformat  ...
    // ich habe jetzt den Hexwert des Zeichens das ich anzeigen möchte!
    // jetzt die Ausgabe:
    
    CString csStr = L"Das soll ein Herz werden: ♥";
    CString csZeichen = cs; // geht auch nicht weil jetzt der String csZeichen einfach nur die Zahl als String hat! :(
    
    CString csZeichen = L"\x2665"; // <-- das ist ein Problem, hex constants must have at least one hex digit
    
    csStr.Replace(L"&#9829", csZeichen); 
    /* wenn das klappen würde dann kann ich mit einer schleife den String durchsuchen und die gewünsten Stellen mit neuen Werten ersetzen
    */
    

    Also, wie bringe ich eine Variable das die Ihren hexwert als Zeichen ausgibt?!
    😮

    mfg
    pixel



  • '\xABC' ist der char mit dem ASCII-Wert 0xABC (analog für whar_t), also brauchst du den Wert nur nach char (bzw. wchar_t) zu casten:

    unsigned int val = atoi(str.Mid(x,y));//x und y ergeben den Teil, in dem deine Zahl steht
    CString rep = (wchar_t) val;
    str.Replace(str.Mid(x,y),rep);
    


  • Hallo CStoll,
    danke, das hat geholfen!!! 👍

    Das auslesen war kein Problem, aber die konvertierung!!!

    MFG
    pixel



  • In dieser while-Schleife mußt du ganz einfach alle "&#" suchen und auswerten:

    int posx = str.Find(L"&#");//suche Anfang der "&#XXX;"-Sequenz
    while(posx>=0)
    {
      int posy=str.Find(L";",posx);//suche Ende der Sequenz
      CString sub=str.Mid(posx+2,posy-posx-2);
      unsigned int val=atoi(sub);
      CString rep=(wchar_t)val;
      str.Replace(str.Mid(posx,posy-posx+1),rep);
      posx=str.Find(L"&#");//suche Anfang der nächsten Sequenz
    }
    

Anmelden zum Antworten