Hallo, char ascii[4]; mit sprintf(ascii,"%c",65); kann man das ascii zeichen von dez 65 ausgeben. ich brauche aber den ansi von z.B dez 139 weiß jemand wie man das schreiben muß? Gruß Michael
Dein sprintf macht nix anderes als ascii[0] = 65; ascii[1] = 0; Welches Zeichen auf deinem Bildschirm fuer dez 65 angezeigt wird, haengt vom eingestellten Zeichensatz ab, nicht von deinem String. ASCII geht nur bis 127 einschliesslich. Hab ich dich falsch verstanden ?
was muß ich ändern wenn ich von dez 139 dieses Zeichen (entspricht ANSI) ausgeben muß?
Ich versteh die Frage immer noch nicht. Eine naheliegend Antwort waere char ascii[4]; sprintf(ascii,"%c",139); aber das erscheint mir zu banal. Also: Welches Problem hast Du wirklich? Schildere uns Dein eigentliches Problem und nicht die Art und Weise wie Du meinst es loesen zu muessen.
ich steh gerade bstimmt auf dem Schlauch. char ascii[4]; sprintf(ascii,"%c",139); ist schon das was ich brauche, nur kommt nicht das " " Zeichen raus. Liegt wohl am Zeichensatz, aber was oder wo muß man das umstellen?
musst du gucken Datenblatt des Controllers, Zeichensatz. Und der ist NICHT identisch mit dem Ascii-Code. Und dann gibst du das Zeichen aus, das dem gewünschten entspricht.
Hm, also die Standard-ASCII-Tabelle geht bis 128. Und hierdrinne ist '<' 60dez(3ch). Oder versteh' ich dich auch nicht richtig?
DU MUSST IM DATENBLATT DES _DISPLAY_-CONTROLLERS SCHAUEN. DA STEHEN ALLE DIREKT DARSTELLBAREN ZEICHEN DRIN, INCLUSIVE DEREN CODE. UND EBEN DIESEN MUSST DU AUSGEBEN.
Auf die serielle Schnittstelle gibts du Daten aus, numerische codes, keine Zeichen. Es haengt vom Empfaenger ab, wie er die Empfangenen Daten anzeigt. Mal angenommen du benutzt ein PC zum Empfang und Windows Hyperterminal als Anzeigeprogramm, dann musst du Hyperterminal so einstellen, dass fuer das Datum 139 das Zeichen '<' angezeigt wird (sollte dies nicht schon passieren). Man kann aber auch die Variante waehlen, am PC zu ermitteln, welches Datum der uC senden muss, damit der PC dann '<' anzeigt, und dann das uC Programm anpassen. Hilft dir diese Antwort weiter ?
ich blick nicht durch, auch wenn ich langsam nerve aber ich versuchs nochmal. Meine ursprüngliche Aufgabe ist folgende: Ich lese Daten Byteweise aus einem Speicher F4 A1 80 8B ... usw. und jetzt muß ich diese Bytes in ANSI auf die serielle Schnittstelle ausgeben. =dez 244 161 128 139 =ANSI ô ¡
Nochmal langsam zum mitschreiben Das wichtigste zuerst: Ueber die Schnittstelle gehen keine 'Zeichen' sondern nur Codes. Was Dein Anzeigegeraet mit einem bestimmten Code macht, ist alleine Sache des Anzeigegeraetes und ist sonst von nichts und niemanden abhaengig. D.h. Wenn du auf Deiner Anzeige ein '<' sehen willst, dann musst Du rausfinden, welchen Code es haben will, damit es eben '<' hinpinselt. Das kann zum Beispiel so aussehen, dass Du Dir ein Hilfsprogramm schreibst, dass einfach mal alle Codes von 1 bis 255 ausgibt. In dieser Tabelle siehst Du dann ganz einfach nach, welcher der richtige ist (falls Dein Gerät das ueberhaupt kann). Sagen wir mal Du hast auf diese Art und Weise rausgefunden, dass Du dem Gerät den Code 60 (0x3C) schicken musst. Dann pinselt es auch brav einen '<' hin. Dann folgt jetzt der naechste Teil. Wann immer in Deinen Daten ein 139 vorkommt, moechtest Du dass ein '<' dafuer hingepinselt wird. Also: if( data == 139 ) { output_to_device( 60 ); und das wars.
Leider sagt uns der gute Michael nicht, was er womit wann und wieso macht, deshalb hier mal mein Tip: Die Funktion sprintf kommt aus irgendeiner (ASCII) Bibliothek, und soll jetzt keine ASCII mehr wandeln, sondern ANSI. Wenn dem so sein sollte, mein Vorschlag: Die Funktion sprintf in der Bibliothek anpassen. Gruß Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.