Integer zu ascii char*
-
Hallo zusammen,
wie konvertiere ich einen Integerwert von 0-255 zu ASCII? Die Funktion, der ich das ASCII-Zeichen übergebe, benötigt aber einen char*
Nach endlosen vergeblichen Suchen in der MS-Hilfe (für Anfänger mehr verwirrend als helfend) weiß ich nicht mehr weiter.
Hat jemand einen Tip? Sicher ist das nur eine Kleinigkeit für die ErfahrenenDanke im Voraus.
Andy
-
Moin,
guck dir bitte mal itoa(...) an!
Damit müßte das klappen....
-
Hallo Andy,
probier es mal mit _itoa (Interger To ASCII). Oder wenn Du es innerhalb einem String die Zahl umwandeln möchtest mit der Funktion sprintf(...);
MS verwendet auch nur die Standartfunktionen von C. Aber auf Grund der Tatsache das mehr Unicode verwendet wird, werden die Standartfunktionen erweitert und mir einem Unterstrich bzw. mit einem w zusätzlich kenntlich gemacht (ISO-Standart) und bei den neuereren Hilfen der MSDN werden leider nur die neueren schreibweisen zur Suche ausgegeben.FALKE
-
Hallo Falke,
Danke für Deine Hilfe.
Wenn ich mir die MS-Hilfe zur _itoa Funktion anschaue,
scheint mir das noch nicht das Richtige. Vielleicht habe ich meine Frage nur
ungeschickt formuliert:
Ich habe z.B. einen Integer mit dem Wert 44 (entspricht "D" als ASCII)
Genau auf das "D" benötige ich dann einen char*
Ich möchte also von einem Integerwert zwischen 0 und 256 einen char* bekommen, der auf den Charakter des entsprechenden ASCII-Wertes zeigt.
Also - habe ich die _itoa-Funktion nicht richtig verstanden oder gibt es noch weitere Möglichkeiten?MFG
Andy
-
Also z.B. Umwandlung von unsigned integer in char-Array (String) mit eigener Funktion:
unsigned char strZahl[12]; unsigned char* uint_to_char( unsigned int d ) { unsigned char* pStr; int i; for( i = 0; i < 12; i++ ) { strZahl[i] = 0; } strZahl[10] = '0'; pStr = &strZahl[10]; if( d ) { while( d ) { *pStr-- = d%10 + '0'; d = d/10; }; pStr++; } return pStr; }
Das entspricht für positive Zahlen der Wirkungsweise von itoa(...).
Darauf aufbauend kann man sich beliebige eigene Funktionen schreiben.[ Dieser Beitrag wurde am 12.06.2003 um 01:44 Uhr von Erhard Henkes editiert. ]
-
http://www.torsten-horn.de/techdocs/ascii.htm
0x44 ist der Hex-Code für den Buchstaben D, dezimal sind dies 68.
Schauen Sie auch nach http://www.henkessoft.de/mfc_einsteigerbuch_kapitel2.htm
Dort finden Sie folgende Funktion (in MFC):
Die Funktion OnTimer wird alle 0,5 Sekunden automatisch ausgeführt. Wir setzen sie ein, um die Variable c von 0 bis 255 hoch zu zählen. Diese Variable soll im ersten Feld als String ausgegeben und im zweiten Feld in ANSI-Code umgewandelt werden. Geben Sie folgenden Programm-Code ein:void CANSIDlg::OnTimer(UINT nIDEvent) { c++; //Zählvariable hochsetzen CString strZahl, strAnsi; strZahl.Format("Zahl: %d", c); m_strEdit1 = strZahl; m_strEdit2 = c; UpdateData(FALSE); CDialog::OnTimer(nIDEvent); }
-
Original erstellt von <Andy>:
Genau auf das "D" benötige ich dann einen char*So bekommtst du einen char-Pointer auf ein int:
int integer = 'D'; char* pChar = reinterpret_cast<char*>(&integer);
Was du wolltest ist aber glaub ich die Umwandlung von int in char und dann den Pointer darauf:
int integer = 'D'; char character = integer; char* pChar = &character;
Oder???
-
Hallo zusammen,
Danke für Eure zahlreichen Antworten.
Leider bin ich noch nicht erfolgreich, aber hier etwas zur Erklärung vorweg:Ich möchte über den seriellen Port einen Mikrokontroller ansprechen und die übertragenen Bytes dort zu Testzwecken ausgeben lassen. Dazu verwende ich die Klasse CSeriell die ich aus diesem Forum habe. Der Fkt. zum Senden werden die Zeichen als char* (m_puffer) übergeben. Das Ganze funktioniert auch einwandfrei, wenn ich ein Zeichen z.B. der Buchstabe D so übergebe: m_puffer="D";
Am Mikrokontroller wird dann an den 8 Ausgängen entsprechend 01000100 ausgegeben. (hex44 dez68)
Nun möchte ich dies auch mit Integern machen, d.h. ich muß den Integerwert 68 in
einen char* auf "D" wandeln. Aber mit den vorgeschlagenen Sachen
funktioniert es nicht.
Habe dann mal debuggt, um zu sehen was genau in m_puffer drinsteht.
Nach Erhard Henkes Variante der Dezimalwert 68 als String, also wie itoa.
Beim Vorschlag MaSTaH stehen zusätzlich zum D irgendwelche Zeichen drin.m_puffer 0x0012f22f "DÌÌÌÌÌÌÌÌXH/"
Wo steckt hier der (Denk)Fehler?
MFG
Andy
-
mach mal so:
char cString[2]="";
cString[0]=0x44;
sollte tun.
-
Hallo dEUs,
ich hoffe ich hab's nicht verkehrt verstanden.
int decval = 68;
char chtest[2]="";
chtest[0]= decval;
m_puffer = &chtest;Zeile 4 produziert folgende Fehlermeldung:
error C2440: '=' : 'char (*__w64 )[2]' kann nicht in 'char *' konvertiert werden
mit Zeile 4 geändert auf
m_puffer = &chtest[0]
gibt es keine Fehlermeldung, aber dann steht auch nichts drin;m_puffer 0x0012f22c "" char *
Hab echt keine Idee mehr...
MFG
Andy
-
bei mir tuts:
char *m_puffer; int decval = 68; char chtest[2]=""; chtest[0]= decval; m_puffer = &chtest[0];
-
@dEUs
Sicherlich hast Du chtest[1] nur übersehen!
-
Öhm? Wie meinen?
-
Hallo dEUs,
Deine Variante funktioniert - zumindestens steht in m_puffer
jetzt laut Debugging auch ein "D" in m_puffer.
Rätselhafterweise funktioniert die Übertragung immer noch nicht.
Warum, kann ich absolut nicht nachvollziehen. Muß an den String irgendwas angehängt werden (was dann beim Debugging nicht angezeigt wird -> Stichwort nullterminierter String)?
Wenn ich das "D" direkt mit m_puffer="D"; reinschreibe, gehts nach wie vor...MFG
Andy
-
Hallo zusammen,
jetzt funktioniert's endlich!
Die Ursache war, daß ich die Variable chtest nur lokal definiert hatte.
Kleine Ursache große Wirkung...Danke nochmals für alle Antworten.
MFG
Andy