In C einen String aus Zahlen und Text zusammenbasteln

Gast #4034787
Lesenswert?
• ▲
▼
eigentlich hätte ich erwartet, dass sowas in C geht:
1
uint8_t x[] = { 0xC3,"Blafasel" };
Sieht auf den ersten Blick richtig aus, funktioniert aber leider nicht.

Ich wollte in dem Fall einen String erzeugen, der ein 
"unaussprechliches" Zeichen enthält.
Den praktischen uneleganten "Workaround" hab ich natürlich, bin aber 
trotzdem mal neugierieg ob es auch eine elegante Lösung gibt, die der 
oben angegebenen Schreibweise ähnelt...
Gast #4034871
Lesenswert?
• ▲
▼
Vielen Dank für die Antworten!

Hab inzwischen probiert, die Lösung
1
uint8_t x[] = "\xC3Blafasel"
macht auf jeden Fall dass wass sie soll. Wieder was dazugelernt. Ich 
hatte bisher immer im Hinterkopf dass der Backslash das folgende Zeichen 
maskiert, war mir aber nicht bewusst dass der auch eine komplette Zahl 
aus der normalen Behandlung als String rausnimmt.

Ist der Default dabei tatsächlich oktal? Muss ich mal googeln...
#4034882
Lesenswert?
• ▲
▼
@ Micheel (Gast)

>Hab inzwischen probiert, die Lösung

>uint8_t x[] = "\xC3Blafasel"

FALSCH! Die Zahl wird als C3B interpretiert! Eben um das zu verhindern, 
muss man das mit Gänsefüsschen trennen!

"\xC3" "Balafasel"

Man kann es nur zusammen schreiben, wenn KEIN Zeichen 0-9, a-f und A-F 
folgt!
Gast #4034888
Lesenswert?
• ▲
▼
womöglich hast Du in der Theorie recht - mein AVR-GCC macht allerdings 
damit genau was ich wollte, fügt also ein Byte mit dem Wert 0xC3 am 
Anfang des String ein.
Womöglich ist das ein Detail bei dem verschiedene C Systeme sich 
unterschiedlich verhalten?
#4034893
Lesenswert?
• ▲
▼
C99 ist eindeutig. Hex werden solange Zeichen eingesammelt, bis es nicht 
mehr passt. Oktal ist nach dem dritten Schluss.

octal-escape-sequence:
  \ octal-digit
  \ octal-digit octal-digit
  \ octal-digit octal-digit octal-digit

hexadecimal-escape-sequence:
  \x hexadecimal-digit
  hexadecimal-escape-sequence hexadecimal-digit
Gast #4034904
Lesenswert?
• ▲
▼
@A.K.: sorry, ich meinte Falk mit meinem Kommentar "womöglich hast Du in 
der Theorie recht", Antworten haben sich überkreuzt.

Praktisch ist das Problem gelöst - und ich hab mir paar zusätzliche 
Krakel-Notizen in mein Lieblings-C-Buch gemacht ;)
Gast #4034932
Lesenswert?
• ▲
▼
Ja, konkret fing der folgende String mit einem K an, das nicht in den 
Wertebereich Hexadezimaler Zahlen fällt.
So gesehen hatte ich im Einzelfall Schwein gehabt. Muss dann wohl die 
Krakeleien in meinem C Buch noch mal ausradieren und neu schreiben ;)

Auf jeden Fall Danke für die hilfreichen Kommentare!
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.