www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was muß ich ändern wenn ich von dez 139 dieses ‹  Zeichen (entspricht
ANSI) ausgeben muß?

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze einen Atmega 128 und im Datenblatt finde ich nichts.

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, also die Standard-ASCII-Tabelle geht bis 128. Und hierdrinne ist
'<' 60dez(3ch).

Oder versteh' ich dich auch nicht richtig?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DU MUSST IM DATENBLATT DES _DISPLAY_-CONTROLLERS SCHAUEN. DA STEHEN ALLE
DIREKT DARSTELLBAREN ZEICHEN DRIN, INCLUSIVE DEREN CODE. UND EBEN DIESEN
MUSST DU AUSGEBEN.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte die Zeichen auf der seriellen Schnittstelle ausgeben.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ô   ¡   €   ‹

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhhhhh... umwandeln in einen ascii-string.

printf("dez = %d %d", 148, 234);

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ascii-string geht aber nur bis dez 127
ich brauche bis dez 255

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.