SDCC und Strings mit Umlauten

Gast #1947784
Hallo Forumsmitglieder,

ich bin gerade dabei ein umfangreiches Programm von Pascal nach C zu 
portieren. Im Programm werden viele Textstrings in verschiedenen 
Sprachen verwendet. Ich habe mir ein array of struct gebaut das im 
Codebereich abgelegt wird. Nun ist es aber so, dass die Strings auch 
Umlaute enthalten, mit denen kommt der SDCC aber anscheinend nicht 
zurecht. Hier ein Ausschnitt in C:
1
 
2
    {0x1A,"Halterung          ",0x06,0x09,0x00},
3
    {0x00,"fr Folien-        ",0x00,0x0A,0x00},
4
    {0x00,"aufnahme           ",0x00,0x08,0x00},
5
    {0x00,"nach oben          ",0x00,0x09,0x00},
6
    {0x00,"rechts             ",0x00,0x06,0x00},
7
    {0x00,"schwenken          ",0x00,0x09,0x00},

und das macht der Compiler daraus:
1
.db #0x1A  ; 26
2
  .ascii "Halterung          "
3
  .db 0x00
4
  .db #0x06  ; 6
5
  .db #0x09  ; 9
6
  .db #0x00  ; 0
7
  .db #0x00  ; 0
8
  .ascii "f"
9
  .db 0xFC
10
  .ascii "r Folien-        "
11
  .db 0x00
12
  .db #0x00  ; 0
13
  .db #0x0A  ; 10
14
  .db #0x00  ; 0
15
  .db #0x00  ; 0
16
  .ascii "aufnahme           "
17
  .db 0x00
18
  .db #0x00  ; 0
19
  .db #0x08  ; 8
20
  .db #0x00  ; 0
21
  .db #0x00  ; 0
22
  .ascii "nach oben          "
23
  .db 0x00
24
  .db #0x00  ; 0
25
  .db #0x09  ; 9
26
  .db #0x00  ; 0
27
  .db #0x00  ; 0
28
  .ascii "rechts             "
29
  .db 0x00
30
  .db #0x00  ; 0
31
  .db #0x06  ; 6
32
  .db #0x00  ; 0
33
  .db #0x00  ; 0
34
  .ascii "schwenken          "
35
  .db 0x00
36
  .db #0x00  ; 0
37
  .db #0x09  ; 9
38
  .db #0x00  ; 0

Das erste Byte im struct ist die Nummer des Textes, dann kommt der Text 
als
String, danach Anzahl der Zeilen, die eigentliche Länge des Strings und 
ein Teiler, der woanders im Programm Verwendung findet.

Weiß jemand, wie ich dem SDCC die ASCII-Zeichen für Umlaute beibringen 
kann?

Gruß Stefan
StefanK. schrieb:
>... ich dem SDCC die ASCII-Zeichen ...

Da ist das Problem. ASCII hat keine Umlaute.

der SDCC ignoriert das und hat exakt das "0xFC", dass in deinem 
Quelltext anstelle des 'ü' steht, in den ASM-Code übernomen.

Lösung => Speicher deinen Quelltext in dem Zeichensatz ab, den du 
nachher auch in deinen ASM-String-Konstanten haben willst.
Gast
Hallo,

ANSI, ASCII, ISO ... alles zum Haareraufen. Ich habe jetzt folgendes 
gemacht:
1
{0x1A,"Halterung          ",0x06,0x09,0x00},
2
    {0x00,"fr Folien-        ",0x00,0x0A,0x00},
3
    {0x00,"aufnahme           ",0x00,0x08,0x00},

Das Zeichen, das hier an Stelle des "ü" erscheint, ist das Zeichen, das 
im Editor erscheint wenn man über die Zifferntasten mit gedrückter 
ALT-Taste die Zahl 0129 eingibt.

Der Compiler macht folgendes daraus:
1
.db #0x1A  ; 26
2
  .ascii "Halterung          "
3
  .db 0x00
4
  .db #0x06  ; 6
5
  .db #0x09  ; 9
6
  .db #0x00  ; 0
7
  .db #0x00  ; 0
8
  .ascii "f"
9
  .db 0xC2
10
  .db 0x81
11
  .ascii "r Folien-        "
12
  .db #0x00  ; 0
13
  .db #0x0A  ; 10
14
  .db #0x00  ; 0
15
  .db #0x00  ; 0
16
  .ascii "aufnahme           "

Er hat jetzt den richtigen Wert 0x81 eingefügt, aber wo kommt das 0xC2 
her?

Gruß Stefan
Ärgere dich nicht lange rum, sondern bau den Umlaut per Hex-Code ein. 
Sonst bist du immer deinem Editor und sonstigen UMgebungsbedingungen 
ausgeliefert
1
#define UMLAUT_U  "\x81"
2

3
...
4

5
   {0x00,"f" UMLAUT_U "r Folien-        ",0x00,0x0A,0x00},
Gast
Hallo Rufus, Karlheinz und die Anderen,

danke für Eure Hilfe, es hat jetzt geklappt, der Editor war tatsächlich 
noch auf UTF-8, keine Ahnung warum, hatte das vorhin vermutlich mal 
umgestellt.

Es funktioniert jetzt wenn man mit ALT + Ziffernblock den ASCII-Code 
eingibt, dann hat man zwar im Editor komische Zeichen, aber im Code 
stimmt es dann.

Gruß Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.