Was ich mein ist, wie man auf diese Multibytes zugreifen kann. Wenn ich mir bspw. ein 'ä' ausgeben lasse, werden zwei Zahlen ausgegeben. Wie kann man mit diesen Zahlen rechnen, dh mit den einzelnen Zahlen?
Umlaute in C
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
|
||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4677 Wohnort: Berlin |
@supeo: Wenn Du da zwei Zahlen ausgeben kannst, musst Du ja irgendwie darauf zugreifen. Also weisst Du schon wie man drauf zugreift, sonst könntest Du sie nicht ausgeben. Ich verstehe die Frage also immer noch nicht? Und was willst Du da rechnen? Beim Suchen und Ersetzen rechnet man ja nicht mit den Zahlen, sondern ersetzt eine Folge von Bytes durch eine Andere. Kannst Du vielleicht mal ein konkretes Problem nennen bei dem Du nicht weiter kommst? Welche Daten hast Du, in welcher Form, und was möchtest Du damit machen? |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
Wenn ich ein mit UTF-8 kodierten Umlaut, bspw. 'ä', mit printf("%d", char zeichen); als Zahl ausgeben lasse, werden zwei Zahlen ausgegeben. Diese möchte ich einzeln mit anderen Zahlen vergleichen lassen. Ich möchte das Zeichen sozusagen zerlegen in die beiden Zahlen (Bytes). Wie? Gruß |
||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4677 Wohnort: Berlin |
Ich verstehe die Frage immer noch nicht. Wenn Du |
||
![]() Anmeldungsdatum: Beiträge: 6490 Wohnort: Hamburg |
Dann liess dir den Wikipediaartikel durch und decodiere das selber. Anhand des ersten Bytes kannst du feststellen wieviele Bytes zu dem gesuchten Zeichen gehören. Du must dann jeden String als Array von "unsigned char" interpretieren (aber nicht umwandeln). Zugriff etwa nach diesem Schema: ... char * eingabestring; /* sollte natürlich text enthalten */ int i=0 /* Byteindex, beginnt mit 0 */ unsigned char byte; /* einzelnes Byte zur Weiterverarbeitung */ byte = *(unsigned char *)(eingabestring + i); /* mach was damit */ i++; ... ist jetzt nur mal so als Idee hingeworfen, wobei ich hoffe das mir da jetzt keiner meiner berühmten Flüchtigkeitsfehler unterlaufen ist. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
Oh ja, ein kleiner Denkfehler von mir. Ich hab nicht drauf geachtet, dass das nächste Byte des Zeichens im nächsten Element ist. Meine Schleife hat schließlich genug Elemente ausgegeben, dabei hat der immer das letzte nicht ausgegeben, was mir aber deswegen nicht aufgefallen ist... mein Fehler. Ich denke damit ist das gelöst. Ich danke euch allen herzlich. Gruß, supeo |
||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4677 Wohnort: Berlin |
Mal ein Versuch von mir:
|
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
Ja, danke dir, ich hab das jetzt am Ende auch so ähnlich gemacht, nur mit negativen Werten. Gibt es irgendeine Funktion, um das Format einer Datei zu überprüfen? Gruß |
||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4677 Wohnort: Berlin |
Du meinst welche Kodierung verwendet wird? Nein gibt es nicht. Das muss man wissen, oder raten. Browser und Mailprogramm haben oft Code der versucht die Kodierung zu raten. So etwas würde ich in eigenen Programmen aber nicht unbedingt machen. Besser den Benutzer die Kodierung explizit angeben lassen. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
Gut, danke, damit ist dieses Thema wie ich das sehe endgültig gelöst. Noch einmal "Danke" für eure Hilfe. Gruß |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 23 |
Ja, danke, so hab ich das jetzt gemacht, funktioniert bestens. Danke für eure Hilfe. Gruß |