c++ Wie std::string in WORD umwandeln ? oder bessere idee ?



  • Hi, ich will einen server programmieren den man farbigen text zuschicken kann, mit colorcodes wie bei MC,dafür habe ich diesen code:

    #include <iostream>
    #include <windows.h>
    #include <string>
    
    int main()
    {
        HANDLE han = GetStdHandle(STD_OUTPUT_HANDLE);
        char colorcode[18] = "0123456789abcdef"; //FARBCODES: &1:dunkkel blau, &2:dunkel grün . . . .
        char text[100] =  "HALLOOOOO&1BLAUUU"; // text der in farben gezeogt werden soll
        unsigned color;
        for(int i = 0;i < sizeof(text)/sizeof(char); i++)
        {
            if(text[i] == '&') //wen ein colorcode gefunden würde
            {
                color = 0x0 + text[i+1];
    
                SetConsoleTextAttribute(han, color); // 2 parameter soll ein word sein, wie könnte ich hier ein string statt word eingeben ?
                i++;
            }else {
            std::cout  << text[i];
        }}
        std::cout << std::endl;
        system("PAUSE");
    
        return 0;
    
    }
    

    Wen noch jemand vorschläge hat wie ich das besser machen könnte bitte dagen 😃
    SRY WEGEN DER RECHTSCHREIBUNG 😃



  • hdasjkhdjkh schrieb:

    ...

    SetConsoleTextAttribute(han, color); // 2 parameter soll ein word sein, wie könnte ich hier ein string statt word eingeben ?
    

    Statt "unsigned color" sollte es "WORD color" heissen.

    Können wir davon ausgehen, das du das char array versendest und
    der gezeigte Code Teil den Empfängers ist?

    Wo ist dann genau das Problem?



  • @hdasjkhdjkh
    Guck dir mal die Funktion strchr an:
    http://www.cplusplus.com/reference/cstring/strchr/

    Ansonsten kannst du dir natürlich auch den Umstand zunutze machen dass die Character Codes für 0...9 und a...f üblicherweise "am Stück" liegen.

    Oder, die ganz brutale Variante wäre einen String zu basteln und diesen dann mit einer Library-Funktion zu parsen.
    Also z.B.

    for(int i = 0;i < sizeof(text)/sizeof(char); i++)
        {
            if(text[i] == '&')
            {
                char buffer[] = { text[i+1], 0 }; // null-terminierten Hex-String basteln
                color = strtol(buffer, 0, 16); // strtol aufrufen um den Hex-Wert in diesem String zu parsen
    
                SetConsoleTextAttribute(han, color);
                i++;
            }else {
            std::cout  << text[i];
        }}
    


  • Danke für deinen code hustbaer ! funktioniert super 😃 👍 👍 👍


Anmelden zum Antworten