Forum: Compiler & IDEs Welchen Zeichensatz hat gcc


von Sam .. (sam1994)


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?

von Walter (Gast)


Lesenswert?

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

von Sam .. (sam1994)


Lesenswert?

"[\]^_´" Das ist der Teststring.

Das kommt dabei raus:

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

von Verwirrter Anfänger (Gast)


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.

von Verwirrter Anfänger (Gast)


Lesenswert?


von Sam .. (sam1994)


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.

von Sam .. (sam1994)


Angehängte Dateien:

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.

von Sam .. (sam1994)


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.

von Johann L. (gjlayde) Benutzerseite


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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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

Merkst du etwas?

von Markus (Gast)


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.

von Karl H. (kbuchegg)


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.

von Markus (Gast)


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?

von Yalu X. (yalu) (Moderator)


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.

von Markus (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


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".

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.