Forum: Mikrocontroller und Digitale Elektronik sprintf


von Michael (Gast)


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

von The Daz (Gast)


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 ?

von Michael (Gast)


Lesenswert?

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

von Karl heinz B. (heinzi)


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.

von Michael (Gast)


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?

von crazy horse (Gast)


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.

von Michael (Gast)


Lesenswert?

ich benutze einen Atmega 128 und im Datenblatt finde ich nichts.

von Marillion (Gast)


Lesenswert?

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

Oder versteh' ich dich auch nicht richtig?

von crazy horse (Gast)


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.

von Michael (Gast)


Lesenswert?

ich möchte die Zeichen auf der seriellen Schnittstelle ausgeben.

von The Daz (Gast)


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 ?

von Michael (Gast)


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 ô   ¡   €   ‹

von Werner B. (Gast)


Lesenswert?

Ahhhhhh... umwandeln in einen ascii-string.

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

von Michael (Gast)


Lesenswert?

ascii-string geht aber nur bis dez 127
ich brauche bis dez 255

von Karl heinz B. (heinzi)


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.

von MNR (Gast)


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

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
Noch kein Account? Hier anmelden.