www.mikrocontroller.net

Forum: Compiler & IDEs Sonderzeichen in konstanten String


Autor: Philipp Co (ba4_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne einen konstanten String an eine Funktion übergeben.

funktion("Das ist der Text mit Sonderzeichen : x");

Wobei x ein Sonderzeichen ist (es steht nicht immer am Ende des Textes). 
Am schönsten wäre es, wenn man einige Zeichen wie \n oder so noch 
definieren könnte. Oder gibt es eine Möglichkeit Sonderzeichen direkt in 
den String zu schreiben? So ala "Texte mit \0x3f Sonderzeichen" ?

sprintf usw würde ich gerne vermeiden. Es sollte möglichst klein sein 
(vom Flash) und es würde mich auch ein wenig stören, wenn der Controller 
einen Text zusammenbauen muss, den eigentlich der Compiler schon hätte 
zusammenbauen können.

Ich hoffe ich konnte einigermassen ausdrücken was ich gerne möchte.

Vielen Dank schonmal
Gruß Philipp

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Texte mit \03 Sonderzeichen"

\03  ist dabei das Zeichen mit dem ASCII Code 0x03

Autor: Philipp Co (ba4_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank. Das ist genau das was ich suchte.

Gruß Philipp

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorsicht:

Die Schreibweise \03 erwartet Oktalzahlen, \08 beispielsweise geht 
nicht.

Besser \x03 in hexadezimaler Notation verwenden ...

Autor: Philipp C (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs auch vorhin gemerkt :)

\41 ergab ! und nicht A

Woran wird eigentlich unterschieden ob ich \0 und danach ne Zahl in ein 
char* schreiben möchte oder ob es zB \03 sein soll?

Gruß Philipp

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am Leerzeichen das dazwischen steht.

Es gibt aber noch einen Trick.
Der Compiler muss mehrere String-Literale die hintereinander
aufgeführt werden zu einem einzigen zusammenfassen.

D.h. ob du

   "Hallo " "Welt"

oder

  "Hallo Welt"

oder

  "Ha" "ll" "o W" "el" "t"

schreibst ist völlig Wurscht. Ist immer dasselbe: Ein
einziger String mit dem Inhalt "Hallo Welt"

Damit kannst du schreiben

   "Texte mit " "\0x41" "5 Sonderzeichen"

Du kannst natürlich dann auch mit Makros arbeiten

// Wenn du zb. in einem LCD die Sonderzeichen 0x01 und
// 0x02 mit Dreieck nach links bzw. Dreieck nach rechts
// belegt hast
#define LEFT "\0x01"
#define RIGHT "\0x02"

....

  lcd_puts( LEFT " Ueberschrift " RIGHT );

Nach der Makro Expansion steht da:

  lcd_puts( "0x01" " Ueberschrift " "0x02" );

Und der Compiler zieht die einzelnen STrings zu einem
zusammen:

  lcd_puts( "0x01 Ueberschrift 0x02" );

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl heinz Buchegger

>   "Texte mit " "\0x41" "5 Sonderzeichen"

Korrektur!

Es muss heissen

   "Texte mit " "\x41" "5 Sonderzeichen"

OHNE 0! Sonst meckert der Compiler, weil er \0 als NULL einfügt und den 
Rest als normale Buchstaben. Und es gibt noch eine weitere Stolperfalle.
Man kann diese Sonderzeichen problemlos direkt in einen String schreiben 
ala

"Das ist schön!" für ein Standard-LCD-> "Das ist sch\xEFn!"

Doch hier lauert McMurphy. In einem String wie "Ich bin am Drücker" 
würde man intuitiv als "Ich bin am Dr\xF5cker" schreiben. Allerdings 
interpretiert der Parser nicht F5 als Char, sondern F5C, weil ja der 
nächste Buchstabe ein C ist. Da das nicht mehr in 8 Bit passt gibts ne 
Warnung und es kommt auch Müll raus. Also immer schreiben
"Ich bin am Dr" "\xF5" "cker"

MfG
Falk

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.