once again: Zeichenkette {0; 255; 0} in COLORREF umwandeln



  • Hi Leute, HELP,

    folgendes Programm hab ich geschrieben:

    int main()
    {
    	char *RotGruenBlau;
    	RotGruenBlau = "0; 255; 0";
    	typedef DWORD COLORREF; 
    	COLORREF color; 
    	int r, g, b;
    	sscanf(RotGruenBlau,"%i;%i;%i",&r,&g,&b); 
    	color = RGB(r,g,b);
    	cout<<"\nFarbe: "<<color<<endl;
    	return 0;
    }
    

    Nun gibt mir color den Wert 65280 raus und eigentlich sollte color den Wert 2147548928 haben.

    Was hab ich falsch gemacht? Darf bei RGB() nur BYTE-Werte (also unsingned char) übergeben? Doch wie schreibe ich dann den Formatbezeichner? Es gibt doch keinen für unsigned char (%uc)?

    Ciao



  • 65280 ist richtig. Wie kommst du auf 2147548928?



  • Hallo,

    weil ich bei folgender Berechnung:

    COLORREF test1 = 2147548928;
    BYTE test2 = GetGValue(test1);
    

    für die Farbe Grün ebenso den Wert test2=255 rausbekomme und ich verstehe es nicht.

    Ciao



  • Die Zahl unterscheidet sich von der anderen dadurch, dass ihr höchstwertiges Bit gesetzt ist (0x8000FF00 vs. 0x0000FF00). Da COLORREF anscheinend nur die unteren drei Bytes benutzt, ist das effektiv das gleiche.



  • 2147548928 == 0x8000FF00, deshalb kommt 255 raus.
    Das heisst aber nicht, dass bei 65280 was falsches rauskommt.

    Jockel


Anmelden zum Antworten