Forum: Mikrocontroller und Digitale Elektronik sprintf - Grad-Symbol mit in string


von uC-Fred (Gast)


Lesenswert?

Hi Leute!

Ist es irgendwie möglich das Grad Symbol direkt mit in sprintf 
reinzubekommen?

Ziel: 123°C

Das Grad Symbol ist ja nicht mehr im Standard ASCII Zeichensatz. Es hat 
248d, bzw 0xF8h.

Ich habe schon verucht es einfach mittels eines %c hineinzubekommen:

sprintf( buffer, %d%cC, deg_c, 248 );

Das klappt jedoch auch nicht. Gibt es eine Formatoption, die einfach die 
248 in den String schreibt? Sonst müsste ich das selbst dranhängen.

Danke

von uC-Fred (Gast)


Lesenswert?

Sorry, es muss natürlich so sein:

sprintf( buffer, "%d%cC", deg_c, 248 );

von Eric B. (beric)


Lesenswert?

1
sprintf( buffer, "%d\xF8C", deg_c);

https://en.wikipedia.org/wiki/Escape_sequences_in_C

von Dr. Sommer (Gast)


Lesenswert?

Beim GCC kannst du auch einfach " °C" schreiben wenn dein Editor auf den 
gleichen Zeichensatz wie dein Ausgabemedium eingestellt ist.

von uC-Fred (Gast)


Lesenswert?

Eric B. schrieb:
> sprintf( buffer, "%d\xF8C", deg_c);

Das funktioniert leider nicht. Das C hinter F8C scheint ebenfalls als 
HEX interpretiert zu werden. Nehme ich das C weg, so erscheint das 
gleiche kryptische Symbol wie wenn ich die Variante mit %c und 248 
benutze. Ein kleines x mit nem Querstrich drauf.

Ich benutze CCS v7.

von uC-Fred (Gast)


Lesenswert?

"Character value is out of range" gibt es als Warnung.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

uC-Fred schrieb:
> so erscheint das gleiche kryptische Symbol wie wenn ich die Variante mit
> %c und 248 benutze.

Bist Du sicher, dass 248 der richtige Code ist? Hört sich nämlich nicht 
so an. Was ist das für ein Ausgabegerät?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

uC-Fred schrieb:
> "Character value is out of range" gibt es als Warnung.

Wann, bei "\xF8C" oder generell? Ja, ist klar, "\xF8C" ist hier keine 
gute Idee. Bei "%c" könnte ich mir noch vorstellen, dass die 248 als 
signed character interpretiert wird.

von uC-Fred (Gast)


Angehängte Dateien:

Lesenswert?

Frank M. schrieb:
> Bist Du sicher, dass 248 der richtige Code ist? Hört sich nämlich nicht
> so an. Was ist das für ein Ausgabegerät?

Das war der richtige Hinweis, danke!
Ich ging von der ASCII-Tabelle im Anhang aus. Da ist 248d das 
Grad-Symbol. Ich schreibe auf ein HD44780 Display - da ist es 223d. Und 
jetzt klappt es auch mit %c und der 223.

Danke euch!

Frank M. schrieb:
> Ja, ist klar, "\xF8C" ist hier keine
> gute Idee.

Ja, ist in diesem Fall ungünstig.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

uC-Fred schrieb:
> Ich ging von der ASCII-Tabelle im Anhang aus.

Das ist ein steinalter DOS-Zeichensatz und hat mit ASCII eigentlich nur 
zur Hälfte zu tun ;-)

> Ich schreibe auf ein HD44780 Display - da ist es 223d. Und jetzt
> klappt es auch mit %c und der 223.

Dachte ich mir schon. Schön, dass es jetzt klappt.

von Dirk B. (dirkb2)


Lesenswert?

1
sprintf( buffer, "%d\xDF""C", deg_c);

oder
1
#define S_DEGREE "\xDF"
2
3
sprintf( buffer, "%d"S_DEGREE"C", deg_c);

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Dr. Sommer schrieb:
> Beim GCC kannst du auch einfach " °C" schreiben wenn dein Editor auf den
> gleichen Zeichensatz wie dein Ausgabemedium eingestellt ist.

Das muss nicht der gleiche sein. Es gibt einen Quell-Zeichensatz und 
einen Zeichensatz für den generierten Code. Der Editor muss nur den 
Quell-Zeichensatz nutzen und der Ziel-Zeichensatz muss auf den vom 
Ausgabemedium eingestellt sein.

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.