Diskussionen und Krempel (alt: Verbesserungen Doku v4)

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Bei ProgramParameter() fehlt die Angabe, ob die Zählung bei 0 oder 1 beginnt - nur falls wir das noch nicht hatten.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nco2k hat geschrieben:
Variablen, Typen und Operatoren hat geschrieben:String .s Länge des Strings + 1 unlimitiert
ist es nicht so, dass zwei 0byte angehängt werden, wenn man die exe als unicode erstellt ?!
AND51 hat geschrieben:Nein, bei Unicode ist jedes Zeichen zwei Byte lang, also auch die NULL. Und da bin ich mir gerade ziemlich sicher! Aber wenn mir jemand nun das Gegenteil beweist, ist es mir auch Recht.
ihr widersprecht euch garnicht.
wenn ein zeichen 2 byte lang ist, und das zeichen #NULL ist, dann besteht es aus zwei nullbytes.

davon ab:
diese beschreibung muss noch angepasst werden, die stammt noch aus der zeit, als unicode noch nicht unterstützt wurde.
richtig wäre:
(Länge des Strings + 1) * SizeOf(Char)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> wenn ein zeichen 2 byte lang ist, und das zeichen #NULL ist, dann besteht es aus zwei nullbytes.
Wie geil! :) So gesehen hast du auch Recht!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
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 »

Kaeru Gaman hat geschrieben: richtig wäre:
(Länge des Strings + 1) * SizeOf(Char)
Bin ja nicht pinkelig, aber:
Länge des Strings + SizeOf(Character)
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...hast recht....

aber es heißt pingelig...

pinkelig heißt du musst auf tö, oder du hast die taschen voller kohlwurst....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

is platt, und jetzt geh ich aufs tö :mrgreen:
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
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

ts-soft hat geschrieben:
Kaeru Gaman hat geschrieben: richtig wäre:
(Länge des Strings + 1) * SizeOf(Char)
Bin ja nicht pinkelig, aber:
Länge des Strings + SizeOf(Character)
wie kommst du auf "Länge des Strings + SizeOf(Character)" ?! ich schiebe die schuld jetzt einfach mal auf die uhrzeit, aber richtig ist natürlich: (Len(String$) + 1) * SizeOf(Character)

AND51 hat geschrieben:Nein, bei Unicode ist jedes Zeichen zwei Byte lang, also auch die NULL. Und da bin ich mir gerade ziemlich sicher! Aber wenn mir jemand nun das Gegenteil beweist, ist es mir auch Recht.
so eine aussage kann ja nur von AND51 kommen. :lol:

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
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 »

nco2k hat geschrieben:wie kommst du auf "Länge des Strings + SizeOf(Character)" ?! ich schiebe die schuld jetzt einfach mal auf die uhrzeit, aber richtig ist natürlich: (Len(String$) + 1) * SizeOf(Character)
hallo, selber wach werden :wink:

Code: Alles auswählen

Len(string.s) + SizeOf(Character)
Nix + 1 und nix malnehmen :lol:
Damit kann man z.B. den notwendigen Space-Buffer berechnen oder anderes sinnloses Zeugs

Die wahre Lösung ist aber diese:

Code: Alles auswählen

StringByteLength(string.s) + SizeOf(Chacter)
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
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

wenn der string aus 100 zeichen besteht, wiegt dieser im ascii modus 100byte + 1byte für die null und da jedes zeichen 2byte lang ist im unicode modus, wiegt ein 100 zeichen langer string 200byte + 2byte für die null.

deine formel:
ascii = Len(string.s) + SizeOf(Character) -> 100 + 1 = 101byte
unicode = Len(string.s) + SizeOf(Character) -> 100 + 2 = 102byte

wo ist da der sinn?! :?

meine formel:
ascii = (Len(String$) + 1) * SizeOf(Character) -> 101byte
unicode = (Len(String$) + 1) * SizeOf(Character) -> 202byte

bzgl. StringByteLength(string.s) + SizeOf(Chacter), es ist auch was ganz anderes als Len(string.s) + SizeOf(Character) und ebenfalls richtig:

ascii = StringByteLength(string.s) + SizeOf(Chacter) -> 101byte
unicode = StringByteLength(string.s) + SizeOf(Chacter) -> 202byte

:wink:

c ya,
nco2k
Zuletzt geändert von nco2k am 09.04.2007 14:18, insgesamt 1-mal geändert.
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
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 »

Meine Formel macht schon Sinn:

Code: Alles auswählen

MyBuffer.l = Space(Len(string.s)) + SizeOf(Character)
Wenn dieser Zweck erwünscht ist, ansonsten sollte man immer StringByteLen
nehmen, das ist dafür extra geschaffen :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
Gesperrt