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?
irgendwas verstehst du falsch, welcher Hexcode passt deiner meinung nach nicht zum Zeichen?
"[\]^_´" Das ist der Teststring. Das kommt dabei raus: [^_´?bc Das 5. (?) hab ich nicht definiert und das letzte Zeichen wird nicht angezeigt.
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.
Noch kurz als Hintergrund: http://de.wikipedia.org/wiki/Escape-Sequenz#Escape-Sequenzen_in_C_und_verwandten_Programmiersprachen
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.
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.
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.
Samuel K. schrieb: > "[\]^_´" Das ist der Teststring. > > Das kommt dabei raus: > > [^_´?bc Nimm ein Hochkomma ' und nicht irgendnen Accent wie ` oder ´ ascii(') = 39 = 0x27
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?
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.
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.
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?
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.
Ja stimmt, ich habe zuerst den Anhang übersehen. Danke für die Aufklärung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.