sprintf

Gast #260461
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 ?
#260463
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.
Gast #260464
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?
Gast #260470
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 ?
Gast #260471
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 ô   ¡   €   ‹
#260474
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.
Gast #260475
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren