Unicode und ich flippe aus

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Unicode und ich flippe aus

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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 /:->
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Warum ist dann das ergebnis falsch? Im Speicher ist übrigend ein Unicode String. (einfach mit Memoryviewer anschauen).
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag 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.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Ist ein Zeichen nicht ein Bit?

*verwirrt bin*
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten