Umwandeln von Zahl in binär



  • Hallo zusammen

    Ich hab eine kurze Frage. Ich bekomme eine gewisse Anzahl von Bytes welche ich nun nicht nur dual, sondern auch binär anzeigen möchte. Jedes einzelne Bit soll in einem Flexgrid angezeigt werden. Wie kann ich das realisieren? Ich habe schon angefangen mit Modulo2, bekomme aber dann die 1 oder 0 nicht angezeigt sondern es kommt ein ASCII-Zeichen. Bei der eins ein |

    Für eure Hilfe bin ich sehr dankbar

    MFG
    Michael



  • Du musst zu dem Ergebnis '0' addieren.

    CHAR ch = '0' + binZahl;
    

    Oder die Format Funktion von CString nutzen.

    CString str;
    str.Format("%d", binZahl);
    


  • Das mit Format ist mir bekannt. Das Problem ist aber ich möchte genau die Binärzahl von meinem Byte, das ich als Zahl darstelle.

    Kurze Erklärung:
    Ich hab eine Zahl in meinem Flexgrid 200 und möchte diese Zahl nun in eine Binärzahl umwandeln, sprich 11001000. Und jedes einzelne Bit soll in einer extra Spalte stehen.
    mein Code dafür:

    for (UINT i = 0; i<18; i++)
    {
             cstrTemp.Format("%.2d", lpBuffer[i]); 
    	m_flexAusgabe.SetTextArray(iCount,cstrTemp);	//in Tabelle anzeigen
    }
    

    Ich bekomme wie man sieht 18 Byte die ich umwandle und anzeige. Und nun möchte ich eben das jedes einzelne Byte auch noch binär angezeigt wird.

    MFG
    Michael



  • Du hast doch oben geschrieben, dass du schon mit Mod rechnest - das musst du trotzdem noch.

    Also: "Von Hand" umrechnen und dann jeweils die Zwischenergebnisse umwandeln.

    Zeig doch mal den Quellcode den du bisher zum Umrechnen hast. Ich habe keine Lust, mir das herzuleiten. Auswendig kann ich es nicht mehr.



  • Also ich hab es so versucht

    if (++Zaehler >= 30)	// Anzeige wird alle 30 Werte erneuert
    {
    	for (UINT i = 0; i<18; i++)
    	{
    		cstrTemp.Format("%.2d", lpBuffer[i]);
    		m_flexAusgabe.SetTextArray(iCount,cstrTemp);	
    
    		iCount += 3;	//Zeilenauswahl
    
    		cstrBin = lpBuffer[i] % 2;
                      m_flexAusgabe.SetTextArray(0,cstrBin);
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
                    	lpBuffer[i] = lpBuffer[i] / 2;
                     	cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
    		cstrBin = lpBuffer[i] % 2;
    		lpBuffer[i] = lpBuffer[i] / 2;
              }
    }
    

    Wenn ich es so mache bekomme ich für die erste Spalte in meinem Flexgrid keine 0 oder 1. Ich hoffe du hast das gemeint und du kannst damit was anfangen

    MFG
    Michael



  • Hmm, sieht ziemlich chaotisch aus, da muss ich etwas länger knobeln.



  • vielleicht hilft euch das:

    template <typename TYPE> char *toBinary (TYPE x)
    {
    	static char result[256];
    	unsigned int s;
    	unsigned int max = 8 * sizeof(TYPE) - 1;
    	for (s=0; s<=max; s++)
    	{
    		if (x&1)
    			result[max-s] = '1';
    		else
    			result[max-s] = '0';
    		x >>= 1;
    	}
    	result[s] = 0;
    	return result;
    }
    ...
    ...
    	cout << toBinary((char)0xff) << endl;
    ...
    ...
    

Anmelden zum Antworten