Seite 1 von 2

Unicode und ich flippe aus

Verfasst: 22.09.2006 20:04
von Konne
Hallo also ich wollte jetzt mein Program auf Unicode umstellen.
Und da habe ich gemerkt dass mein Programm hier 4 debuggt (Unicode aktiviert und UTF-8 als IDE ding).

Code: Alles auswählen

String.s="test"
Debug MemoryStringLength(@String)
Was mache ich denn falsch?

Verfasst: 22.09.2006 20:12
von ts-soft
Machs doch einfach so:

Code: Alles auswählen

String.s="test"
Debug MemoryStringLength(@String) * SizeOf(Character) 
Ist jetzt keine Erklärung, sondern ein WorkAround :wink:

Verfasst: 22.09.2006 20:14
von Konne
Schon aber wenn ich dann auf UTF-8 umstelle habe ich wieder probleme.
Auserdem sollte MemoryStringLenght doch genau dazu da sein um die Lenge eines Strings im Speicher zu erhalten /:->

Verfasst: 22.09.2006 20:26
von ts-soft
PB arbeitet mit ANSI oder UNICODE Strings. Die IDE arbeitet mit UTF-8
Du kannst auch UTF-8 peeken und poken, aber strings sind ANSI oder
UNICODE. Lediglich im Speicher kanns anders stehen, weil Du es so gepoked
hast.

Verfasst: 22.09.2006 20:48
von Konne
Warum ist dann das ergebnis falsch? Im Speicher ist übrigend ein Unicode String. (einfach mit Memoryviewer anschauen).

Verfasst: 22.09.2006 20:55
von ts-soft
Ich denke mal, das wir uns was falsches unter der Funktion vorstellen. Ist
das Äquavalent zu Len, aber es wird ein Pointer angegeben.

Das würde aber einen fehlerhaften Hilfetext bedeuten. Ich weiß nicht, mal
sehen ob André was dazu sagen kann, bzw. im engl. Fragen.

Verfasst: 23.09.2006 02:44
von freak
ts-soft hat geschrieben:Ich denke mal, das wir uns was falsches unter der Funktion vorstellen. Ist
das Äquavalent zu Len, aber es wird ein Pointer angegeben.

Das würde aber einen fehlerhaften Hilfetext bedeuten. Ich weiß nicht, mal
sehen ob André was dazu sagen kann, bzw. im engl. Fragen.
Stimmt, die Funktion zählt wie Len() in Zeichen, nicht in Bytes. Die Hilfe ist da
nicht ganz korrekt. Füher hat man einfach Bytes geschrieben, weil ein Zeichen eben
ein Byte war. Mit dem Unicode Support stimmt das nicht mehr, aber in der Hilfe
sind wohl einige der "Bytes" übersehen worden beim Updaten.

Verfasst: 23.09.2006 10:33
von Alves
Ist ein Zeichen nicht ein Bit?

*verwirrt bin*

Verfasst: 23.09.2006 10:59
von Tafkadasom2k5
Alves hat geschrieben:Ist ein Zeichen nicht ein Bit?

*verwirrt bin*
BYTE ist ein zeichen. Ein Byte besteht aus 8 Bit. Ein Byte ist ein Zeichen, im ASCII-Bereich waren es bis zu 256-Zeichen (0-255).

Ein WORD besteht aus 2 BYTES (meine ich zumindest) und hat irgendwas damit zu tun, dass damalige Prozessoren immer 2Bytes zu einem Befehl ausgewertet haben- aber da bin ich mir nicht mehr so sicher... ;)

Gr33tz
Tafkadasom2k5

Verfasst: 23.09.2006 11:09
von ts-soft
Kleine Korrektur, da die Aussagen so nicht ganz richtig wahren.

Ein Zeichen ist ein Char! Bei PB Versionen vor PB4 gabs kein Char, deshalb
hat man ein Byte genommen, was für ASCII ausreicht. Bei ANSI mußte man
wiederum aufpassen, da ein unsigned Byte erforderlich wäre, welches aber
mit Tricks ja unterstützt wurde.

Seit PB4 sollte man unbedingt Char verwenden, welches bei Unicode autom.
zum WChar mutiert :mrgreen: (ein Word groß wird)

Am besten nochmal in der Hilfe nachlesen, da stehen eigentlich eine Menge
Infos drinn. Auf Wikipedia gibts dann noch mehr Infos

Ich hoffe, es ist verständlich und auch richtig :wink: