Werte aus Klammern extrahieren !



  • Hi @ all
    Ich habe ein Problem , ich weis nicht wie ich die Werte aus der Klammer eines uint16 (1 , 2 , 3 )
    rausbekomme ! Am besten in Variablen des Typs int aber ist mir erstmal egal , hauptsache aus der Klammer raus 😃



  • Geht das auch auf Deutsch (und mit Beispielcode)? uint16 ist afaik ein vorzeichenloser 16-Bit Ganzzahltyp, da stehen keine Klammern drin.



  • uint16 Color = RGB15( 5,5,5 );
    

    So sieht das ganze dann aus !
    Ich würde gerne wissen , ob man die Werte innerhalb der Klammer (gemeint sind 5 , 5 , und 5) extrahieren kann . Wenn es eine oder Mehrere möglichkeiten gibt , würde ich gerne in erfahrung bringen wie diese auszsehen haben

    (besser?)



  • naja, man sollte halt wissen, wass diese funktion RGB15 macht. vonwo hast du die? -> dort gibts sicher auch ne funktion zum zurückwandeln?

    mfg blan



  • Schau dir mal die Definition von "RGB15()" an (dürfte letzendlich auf einige Bit-Manipulationen hinauslaufen) und stell fest, wie die einzelnen Teilparameter zu einem int-Wert zusammengefasst werden - dann kannst du diese Zusammenfassung auch wieder umkehren (mit Bit-Shift's und &-Operator).



  • óÒ *n00b sei* *keine Ahnung von Bit Shifts hab*

    wie soll das funktionieren ?



  • Poste doch mal die Funktion RGB15. Man kann zwar vermuten, dass jeweils 5bit pro Farbe zusammengeschmissen werden, aber wer weiß ...



  • Das geht mit Bit-Shifts.



  • unsigned schrieb:

    óÒ *n00b sei* *keine Ahnung von Bit Shifts hab*

    wie soll das funktionieren ?

    Der Aufklärer schrieb:

    Das geht mit Bit-Shifts.

    Aha und kannst du mich auch darüber Aufklären wie diese "Bit Shifts" funktionieren ? und sag ja nicht

    Der Aufklärer schrieb:

    Das geht mit Bit-Shifts.



  • RGB15 suggeriert 5 Bit pro Farbe (kann auch anders sein, aber das ist wohl am realistischsten). Es wird also etwa so arbeiten (in Makroform und mit mehr Idiotensicherheit):

    a << 10 | b << 5 | c;
    

    Die Bits von a werden um 10 nach links geschoben, die von b um 5 und die von c überhaupt nicht. Willst du also a erhalten schiebst du einfach das Ergebnis um 10 nach rechts:

    RGB15(8,2,4) >> 10 == 8;
    

    Für b ist es etwas schwieriger, da du erst die anderen Bits maskieren musst (damit a nicht dabei ist):

    (RGB15(8,2,4) & 0x3E0) >> 5 == 2;
    

    Für c schließlich musst du nur noch maskieren:

    RGB15(8,2,4) & 0x1F == 4;
    

    Das alles unter der Annahme, dass RGB15 arbeitet wie oben beschrieben (und ich keinen Denkfehler begangen habe ;))



  • Danke .filmor , aber hab trotzdem keine Ahnung wie ich die R , G und B Werte damit rausbekomme , hab nich so viel mit den Bitwise Operatoren am Hut

    Der RGB15 Makro sieht übrigens so aus

    #define RGB15(r,g,b)  ((r)|((g)<<5)|((b)<<10))
    

    Trotzdem schon mal danke 👍



  • Mich würde interessieren was du da programmierst, wenn du sowohl ein Problem hast eine Frage zu formulieren als auch die Antworten nicht verstehst. Ein paar Grundlagen zu den Operatoren schaden jedenfalls nie. Die Antworten nachzuvollziehen ist die Gelegenheit was dazu zu lernen 😉 .



  • Ich fands eigentlich ziemlich eindeutig, aber hier noch mal:

    unsigned farbe = RGB15(8,2,4);
    
    // Entspricht a in meinem Beispiel
    unsigned rot = farbe >> 10;
    
    // Entspricht b
    unsigned gruen = (farbe & 0x3E0) >> 5;
    
    // Entspricht c
    unsigned blau = farbe& 0x1F;
    

    Und von nun an bitte nur noch eindeutige, klare und direkte Fragen. ("Das versteh ich nicht" fällt da zum Beispiel nicht drunter).



  • Es war auch recht eindeutig , nur habe ich beim der Kompilierung Fehlernachrichten bekommen und ich dachte es liegt daran , das ich etwas falsch gemacht hab aber mit deinem Code habe ich die Selben fehler bekommen :

    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'
    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'

    [Frage]
    Wie kann ich diese beiden Fehler korregieren ?

    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'
    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'

    Die Fehler traten bei diesem Code ein !

    unsigned farbe = RGB15(8,2,4);
    
    // Entspricht a in meinem Beispiel
    unsigned rot = farbe >> 10;
    
    // Entspricht b
    unsigned gruen(farbe & 0x3E0) >> 5;
    
    // Entspricht c
    unsigned blau = farbe& 0x1F;
    

    [/Frage]



  • Nach gruen bitte ein = (Sorry mein Fehler, habs oben korrigiert).



  • Danke , jetzt Funktioniert alles

    Könntet ihr mir auch bitte bei den Folgenden Fehlern helfen , ich verstehe nicht , was sie Bedeuten ?

    expected unqualified-id before '||' token
    expected primary-expression before '||' token
    invalid type argument of 'unary *'
    expected primary-expression before '||' token

    Benutzt wurde einen g++ compiler : make.exe

    Die Fehler traten bei diesem Code ein !

    void FillBackbufferWithPixelRGBA (int x , int y , uint16 color , int Alpha , bool AllowOverwrite , rendermode Rendermode){
    	int FieldPos = ( y * SCREEN_WIDTH ) + x;
    	uint16 OldBufferInfo = Backbuffer[FieldPos];
    	uint16 NewBufferInfo = color;
    
    	unsigned br ;
    	unsigned bg ;
    	unsigned bb ;
    
    	unsigned or = OldBufferInfo >> 10;
    	unsigned og = (OldBufferInfo & 0x3E0) >> 5;
    	unsigned ob = OldBufferInfo & 0x1F;
    
    	unsigned nr = NewBufferInfo >> 10;
    	unsigned ng = (NewBufferInfo & 0x3E0) >> 5;
    	unsigned nb = NewBufferInfo & 0x1F;
    
    	switch (Rendermode){
    		case solid:
    				br = (or * nr) / 2;
    				bg = (og * ng) / 2;
    				bb = (ob * nb) / 2; 
    				NewBufferInfo = RGB15( br , bg , bb);
    				break;
    		case additive:
    				br = or + nr;
    				bg = og + ng;
    				bb = ob + nb; 
    				NewBufferInfo = RGB15( br , bg , bb);
    				break;
    			}
    
    	}
    


  • unsigned schrieb:

    Es war auch recht eindeutig , nur habe ich beim der Kompilierung Fehlernachrichten bekommen und ich dachte es liegt daran , das ich etwas falsch gemacht hab aber mit deinem Code habe ich die Selben fehler bekommen :

    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'
    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'

    [Frage]
    Wie kann ich diese beiden Fehler korregieren ?

    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'
    error C2143: Syntaxfehler : Fehlendes ';' vor '>>'

    Die Fehler traten bei diesem Code ein !

    unsigned farbe = RGB15(8,2,4);
    
    // Entspricht a in meinem Beispiel
    unsigned rot = farbe >> 10;
    
    // Entspricht b
    unsigned gruen(farbe & 0x3E0) >> 5;
    
    // Entspricht c
    unsigned blau = farbe& 0x1F;
    

    [/Frage]

    alda, willst du uns verar....

    wenn du bei diesen paar zeilen code nicht selbst siehst das eine anweisung nicht mit einem ";" abgeschlossen ist, dann weiss ich auch nicht

    nimm ein buch, tuto zur hand, oder wie auch immer, aber poste nicht wegen jeden furz hier rein, mit der begründung

    "versteh ich nicht"

    heul hier nicht rum, sondern LERNE ERSTMAL DIE GRUNDLAGEN

    und die grundlagen des suchens

    wenn mir einer sagt

    "bit-shift" und ich hab keine ahnung, poste ich nicht gleich rum, sondere benutze z.b. google und schau mir da erstmal die erklärungen an, und wenn ich es immer noch nicht kapiere, dann stelle ich konkrete fragen zu bit-shifts was ich da nicht kapiert habe

    sorry, das es so drastisch ist, aber sonst kapierst du es nie.

    ich bitte auch die anderen den nicht mehr zu helfen! ( ausser er stellt man konkret fragen )

    hausaufgaben o.ä. werden hier nicht gelöst!



  • ajax das "Es war auch recht eindeutig" hat sich auf .filmor bezogen

    Falls du nix besseres zu hast , als dich zu beschweren , dann poste nich so einen Müll . Wenn ich was ins Forum schreibe , dann rechne ich eigentlich mit Hilfe und nicht mit irgendwelchen ... Leuten die sich darüber beschweren das ich nich mit jeder Feinheit in C++ gelernt hab . Ich hab erst vor einer Woche angefangen und im Tutorial , das ich gelesen habe , stand nichts über die Bitwise Operatoren und das die nicht umbedingt notwendig wären

    Anstatt so einen Mist wie da Oben zu posten hättest du mir ja n Tut empfehlen können , aber nein , schei** auf die Hilfsbereitschaft



  • unsigned schrieb:

    ajax das "Es war auch recht eindeutig" hat sich auf .filmor bezogen

    Leuten die sich darüber beschweren das ich nich mit jeder Feinheit in C++ gelernt hab . Ich hab erst vor einer Woche angefangen und im Tutorial , das ich gelesen habe , stand nichts über die Bitwise Operatoren und das die nicht umbedingt notwendig wären

    ja ja, entschuldige dich somit, echt coole einstellung im leben 👍
    und dann gleich runflamen wie ein kiddy

    das beste ist

    unsigned schrieb:

    das ich nich mit jeder Feinheit in C++ gelernt hab

    wow, am schluss ein ";" zu machen für abschluss einer anweisung

    wow geile, "Feinheit". ist echt "high level skilz" ( um es in deiner sprache auszudrücken )



  • unsigned: Vollidiot


Anmelden zum Antworten