www.mikrocontroller.net

Forum: Compiler & IDEs Welchen Zeichensatz hat gcc


Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade mein Array für meine 8*7Segment Anzeigen fertig, da 
bemerke ich, dass Gcc gar nicht ASCII hat, bzw. modifiziert ist:

Von ' ' bis '[' stimmt alles, aber dann wird aus dem 'a' ein 'b', obwohl 
zwischen ich mich nicht verzählt habe. Genaueres zum ASCII sieht man 
hier:
http://www.torsten-horn.de/techdocs/ascii.htm

Wie man sieht sind es zwischen 'Z' und 'a' 6 Zeichen. Das habe ich auch.
Muss ich da was umstellen? Oder kennt ihr eine Seite die den richtigen 
Zeichensatz darstellt?

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwas verstehst du falsch,
welcher Hexcode passt deiner meinung nach nicht zum Zeichen?

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"[\]^_´" Das ist der Teststring.

Das kommt dabei raus:

[^_´?bc
Das 5. (?) hab ich nicht definiert und das letzte Zeichen wird nicht 
angezeigt.

Autor: Verwirrter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dir ist aber schon klar, das das \] versucht wird als ein escapedes 
Zeichen zu parsen und dein String daher nur 5 Zeiche lang ist und nicht 
6?

Um ein \ aus zugeben, muss man das escapen und \\ schreiben.
Da \[ nicht definiert ist wird das wahrscheinlich ignoriert, der String 
ist nur 4 Zeichen lang und der Rest danach sind vielleicht irgendwelche 
Werte, die gerade hinter dem String im RAM standen.

Nur so eine grobe Vermutung.
Aber ich bin mir sicher, das gcc keine Probleme hat die aus einem 'a' 
irgendein anderes Zeichen machen würden.

Ansonsten poste doch mal deinen gesamten code.

Autor: Verwirrter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwirrter Anfänger schrieb:
> Ansonsten poste doch mal deinen gesamten code.

Wäre ein bisschen viel.

Die Escapesequenz ist mir gerade auch eingefallen. Man bin ich blöd!

Ich muss nochmal ein bisschen experimentieren.

Autor: Sam .. (sam1994)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal der Code.

In der Font hab ich ein Zeichen auskommentiert. Das muss man wieder 
einkommentieren, hab ich nur vergessen. Das war bei den Tests oben aber 
aktiv.

EDIT:

Da fehlt ein Zeichen. Laut der Tabelle hab ich alle. Wenn ich einfach 
eine 0, einfüge funktioniert es.
Achja im kleinen a ist ein Fehler: Das 3. bit muss auch wahr sein. Kommt 
davon wenn man das freihand macht.

Das ']' scheint nicht den Wert der ASCII Tabelle zu haben.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man einfach einen Wert zwischen '\\' und ']' einfügt (z.b. 0) 
funktioniert es. kp was gcc da macht. Da ist aufjedenfall die Lücke.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Samuel K. schrieb:
> "[\]^_´" Das ist der Teststring.
>
> Das kommt dabei raus:
>
> [^_´?bc

Nimm ein Hochkomma ' und nicht irgendnen Accent wie ` oder ´

ascii(') = 39 = 0x27

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat dein Editor kein Syntax-Highlighting? Wenn nicht, schau dir mal an,
wie die Forensoftware die Zeile mit dem ']' einfärbt:
    0b01011011, // Z
    0b00110000, // [
    0b01100100, // \
    0b00000110, // ]
    0b00000001, // ^
    0b00001000, // _

Merkst du etwas?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir einer den Zusammenhang von Yalus Beispiel mit dem Problem von 
OP erklären? In Yalus Beispiel wird mit dem \ einfach der Kommentar auf 
die nächste Zeile "erweitert". Bei OPs Beispiel kommt aber kein \ nach 
einem Kommentar vor, sondern es wird eine ungültige Escape-Sequenz 
innerhalb eines String-Literals angegeben, mit der der Compiler nichts 
anfangen kann. Ich sehe den Zusammenhang zwischen den beiden Beispielen 
irgendwie nicht.

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

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Kann mir einer den Zusammenhang von Yalus Beispiel mit dem Problem von
> OP erklären? In Yalus Beispiel wird mit dem \ einfach der Kommentar auf
> die nächste Zeile "erweitert". Bei OPs Beispiel kommt aber kein \ nach
> einem Kommentar vor,

Kommt bei ihm genauso vor.
In der Datei 7SegmentASCII.h


> anfangen kann. Ich sehe den Zusammenhang zwischen den beiden Beispielen
> irgendwie nicht.

Der Zusammenhang ist das \ Zeichen, bei dem man vorsichtig sein muss.

Innheralb eines Strings/Character gehört noch das nächste Zeichen dazu 
und die beiden formen eine sog. Escape Sequenz.
Ausserhalb eines Strings, wenn das \ Zeichen das letzte Zeichen einer 
Zeile ist, ist es das Zeilen-Verbindungszeichen und die beiden Zeilen 
werden vom Compiler zu einer einzigen zusammengefügt, ehe dann diese 
Zeile interpretiert wird.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ok, den Anhang hab ich übersehen.

Ich bin aber trotzdem der Meinung, dass das prinzipiell 2 verschiedene 
Probleme sind.

- \ als Escape Sequenz
- \ als Zeilenverbindungszeichen
haben doch grundsätzlich nichts miteinander zu tun?

So wie der * zur Deklaration eines Pointers verwendet wird, aber auch 
als Indirektionsoperator zum dereferenzieren des Wertes der Variablen 
auf die der Pointer zeigt zum Einsatz kommt. Wenn man es genau nimmt, 
sind das doch auch 2 unterschiedliche Dinge. Vielleicht bin ich da zu 
kleinlich, aber wenn mans genau nimmt ist es doch so oder nicht?

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> Ich bin aber trotzdem der Meinung, dass das prinzipiell 2 verschiedene
> Probleme sind.

Sind es auch. Das unabsichtliche Zeilenfortsetzungs-'\' passt aber am
besten zur ursprünglichen Fehlerbeschreibung:

Samuel K. schrieb:
> Von ' ' bis '[' stimmt alles, aber dann wird aus dem 'a' ein 'b', obwohl
> zwischen ich mich nicht verzählt habe.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja stimmt, ich habe zuerst den Anhang übersehen. Danke für die 
Aufklärung.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> - \ als Escape Sequenz
> - \ als Zeilenverbindungszeichen
> haben doch grundsätzlich nichts miteinander zu tun?

Wie man's nimmt. Letztendlich wird mit dem \ am Zeilenende auch nur das 
newline-Zeichen "escaped".

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.