Chr(0) in Stringvariable ?

Anfängerfragen zum Programmieren mit PureBasic.
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Chr(0) in Stringvariable ?

Beitrag von brandelh »

Hi,

ich will eine EXE Datei in eine Stringvariable packen (WEB-Download...) und auf Festplatte speichern. Soweit so gut, aber in der EXE sind auch immer chr(0) enthalten und PureBasic scheint diese nicht in Stringvars speichern zu können :(. Auch PeekS() stoppt immer an chr(0), stimmt das so ? PeekS brauche ich weil

Code: Alles auswählen

nLenGet = ReceiveNetworkData(nConID, *cBuffer, nLen)
immer nur in einen Puffer schreiben kann).

Code: Alles auswählen

s$ = "Test"+Chr(0)+"*"   -> sollte "Test_*" sein
Debug s$                                 -> ist aber "Test"
n = Len(s$)
Debug n                                  -> Länge = 4
Gibt es eine Möglichkeit chr(0) anders unterzubringen ?

Meine LoadFromUrl() Funktion funktioniert bei Texten einwandfrei, aber EXE etc. wird zerhackt.

Tschüß
Hubert
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Das Zeichen Chr(0) gilt allgemein als Markierung für das Stringende. Daran halten sich alle Stringfunktionen von PureBasic.

Einzig bei PeekS() & PokeS() hat mit die Möglichkeit über das Stopbyte hinauszukommen. Man muss allerdings dazu die genaue Länge des Strings kennen. Durch ReceiveNetworkData() erhält man die genaue Stringlänge.

Code: Alles auswählen

nLenGet = ReceiveNetworkData(nConID, *cBuffer, nLen)   ; nLenGet enthält die Länge des Strings
WriteData(*cBuffer, nLenGet)   ; schreibt alle empfangen Bytes (auch Chr(0)) in eine geöffnete Datei

Code: Alles auswählen

Var$ = "Test" + Chr(0) + "*"     ; Der String ist 6 Zeichen lang (eigendlich ist er 7 Bytes lang,
                                 ; weil noch automatisch ein Chr(0) ans Stringende gesetzt wird)
PointerZuVar.l = @Var$

Debug PeekS(PointerZuVar, 6)     ; Stringausgabe bricht beim ersten Chr(0) ab, aber
Debug PeekS(PointerZuVar + 5, 1) ; das *-Zeichen befindet sich denoch in der Variable.
Zuletzt geändert von Laurin am 20.03.2006 13:29, insgesamt 1-mal geändert.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh »

Hallo,

Danke für die Antwort, ich habe es befürchtet. Die C-Konventionen greifen immer mehr um sich ;-).

Tschüß
Hubert
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Strings würde ich dennoch nicht verwenden.

Am besten nimmst du [c]AllocateMemory(Size)[/c] um einen Buffer zu
allokieren, in den du die Daten speicherst. Dann kannst du auch mit
[c]WriteData()[/c] die heruntergeladenen Daten in eine Datei schreiben.
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh »

Hallo,

danke, das mit AllocateMemory(Size) habe ich schon verwendet und writedata() ist sicherlich besser als die ganze Datei im Speicher zu halten, es könnten ja GB sein ... aber es ist für mich halt sehr ungewohnt, dass ein Basiccompiler auf chr(0) reagiert.

Das kenne ich nur von Pascal und C.

Tschüß
Hubert
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ist aber Standard...
Bild
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 »

MVXA hat geschrieben:Ist aber Standard...
Es gibt keinen BASIC-Standard und es ist in BASIC nicht üblich, das Strings
nullterminiert sind. Aber ich finde es in Ordnung so!
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
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh »

... bei PureBasic, nachdem ich es nun weiß richte ich mich danach.
Antworten