Bits von einem char manipulieren



  • Ich möchte gerne die Bits von einem char direkt manipulieren. Bis jetzt habe ich folgende Lösung:

    char test[] = "F";
    
                test[0]=test[0]|(1<<0);
                test[0]=test[0]|(1<<1);
                test[0]=test[0]|(0<<2);
                test[0]=test[0]|(1<<3);
                test[0]=test[0]|(1<<4);
                test[0]=test[0]|(0<<5);
                test[0]=test[0]|(1<<6);
                test[0]=test[0]|(0<<7);
    
                MessageBox(NULL, test, "Stringausgabe", MB_OK);
    

    Ich habe hier eine ASCII Tabelle, aber irgendwie passen die Zeichen nicht zu dem was ich als Bits eingebe. Werden chars nicht als ASCII interpretiert? Wenn nicht wüsste ich gerne, was ich sonst für eine Tabelle benötige, oder liegt der Fehler woanders? (Sry, bin Anfänger)



  • In deinem Beispiel müsste '_' herauskommen.
    (Als Veroderung von 'F'=0x46 und '['=0x5B)

    Was kommt denn raus?



  • OK, dann habe ich das Problem erkannt. Kann mir jemand sagen wie ich die Bits nicht verodere, sondern direkt auf den gewünschten Wert setze?



  • Ich habe alles durchsucht, aber ich finde einfach keine vernünftige Beschreibung über Bit Manipulationen.
    Gibt es keine Möglichkeit, dass ich das ite Bit eines Chars direkt auf einen Wert meiner Wahl setze?



  • bit vor den odern auf 0 setzten. Tip: '~' ist die Bitweise Negierung einer Zahl
    x = x & ~(1<2); löscht das 3. Bit.





  • Auf diesen Thread bin ich auch schon gestossen. Leider hat er mir ebenfalls nicht die richtigen Werte geliefert.
    Aber ich hab die Lösung endlich gefunden... Man muss die Bitwerte rückwärts (von unten nach oben -> also Position 7 für das erste Bit) eingeben um die richtigen Zeichen zu erhalten. 💡
    Auf jeden Fall danke für die Mühen und sry dass ich euch so lange damit genervt habe...


Anmelden zum Antworten