[C++] int in char kopieren ohne Umsetzung in ASCII-Zeichen

ph4nt0m

Lieutenant
Registriert
Apr. 2004
Beiträge
985
Hallo,
ich wollte gerade ein kleines Programm zum Test in C + WinApi schreiben. Es soll ganz einfach Dezimalwerte in Binärwerte konvertieren. Dabei bin ich soweit gekommen, dass durch das Divisionsverfahren die Reste der einzelnen Rechenoperationen nacheinander in ein Array gespeichert werden (hier in iTmp).
Nun müssen diese aber noch umgedreht werden, weil die Reste bei diesem Verfahren ja erst in umgekehrter Reihenfolge die Binärzahl ergeben. Ich wollte dies mit einer Schleife lösen um das letzte Element in das erste eines weiteren Arrays (hier sBin), danach das vorletzte von iTmp in das zweite von sBin usw...
Zum Schluss soll der enstehende String sBin mit Hilfe von SetDlgItemText ausgegeben werden.
Code:
UINT	iDec = GetDlgItemInt(hWnd, IDC_DEC, NULL, FALSE);	//umzuwandelnde Dezimalzahl wird gespeichert	
UINT	iTmp[30];
TCHAR   sBin[30];
int	i = 0;

do
{
    iTmp[i] = iDec % 2;			
    iDec /= 2;
    i++;
}while(iDec > 0);
			
sBin[0] = iTmp[0];			
			
SetDlgItemText(hWnd, IDC_BIN, sBin);

Ich weiß nicht, wie ich das Invertieren hinbekommen soll, denn es scheitert schon an dem Versuch, mal probeweise nur ein Element aus dem int Array in das char Array zu kopieren (siehe vorletzte Codezeile).
Zwar meckert der Comiler nicht, aber das Ergebnis ist komisch. Ich schätze, dass beim Kopieren nicht der int Wert aus iTmp, sondern das passende ASCII Zeichen in sBin kopiert und dann auch ausgegeben wird. Ich möchte aber natürlich nur die Zahl an sich ausgeben.

Ich würde mich über Lösungsvorschläge sehr freuen :)
Gruß, Martin
 
Zahl + 30Hex = ASCII-Zahl

Edit: Probier mal das:

Code:
for(;i>=0;i--) {
  sBin[29-i] = iDec[i] + 48;
}
 
Zuletzt bearbeitet:
Danke für deine Hilfe. Ich habe das "Programm" jetzt hinbekommen. Hier die Lösung:
Code:
do
{
	iTmp[i] = iDec % 2;			
	iDec /= 2;
	i++;
	count++;
}while(iDec > 0);			

			
for(i = 0, p = count-1; i < count, p >= 0; i++, p--) 
{
	sBin[i] = iTmp[p] + 0x30;
}

sBin[count] = '\0';			//der String wird mit einer binären Null nach dem letzten Zeichen beendet

SetDlgItemText(hWnd, IDC_BIN, sBin);
Vielleicht kanns ja irgendjemand mal gebrauchen.
Gruß, Martin
 
mh ein gemeiner trick ist das hier:

charvar = intvar + '0'; im prinzip machste nix anderes als die ascii 0 dazuzuzählen.


edit: ok zu langsam ;)
 

Ähnliche Themen

Zurück
Oben