Seite 1 von 1

fixed StringArray erzeugen

Verfasst: 09.12.2013 16:26
von SBond
Hi leute,

wie kann in einem StringArray die Stringlänge festlegen?

Code: Alles auswählen

Structure irgendwas
	Wert_1.s{20}				; das geht
	Array Werte_A.s(20)			; das geht auch
	Array Werte_A.s(20){20}		; das geht nicht
EndStructure
lg
Sbond

__________________________________________________
Code-Tags hinzugefügt
09.12.2013
RSBasic

Re: fixed StringArray erzeugen

Verfasst: 09.12.2013 16:34
von Bisonte
Mir nicht wirklich bekannt. Aber vielleicht einen kleinen Array Ersatz basteln mit Maps ?

Code: Alles auswählen

Structure struct_fixed_string
  String.s{8}
EndStructure

Structure irgendwas
  Map Werte.struct_fixed_string()
EndStructure

Global Test.irgendwas

Macro Werte_A(ArrayNr)
  Werte(Str(ArrayNr))\String
EndMacro

For i = 0 To 20
  Test\Werte(Str(i))\String = Str(i) +". Das ist ein Langer String"
Next i

Debug Test\Werte(Str(3))\String ; <- ohne Macro

Debug Test\Werte_A(4) ; <- Mit Macro

Re: fixed StringArray erzeugen

Verfasst: 09.12.2013 16:34
von Derren
Mit ein bisschen rumprobieren hättest du es bestimmt auch allein geschafft ;)
Einfach {} und () vertauschen.

Code: Alles auswählen

Structure irgendwas
  Wert_1.s{20} ; das geht
  Array Werte_A.s(20) ; das geht auch
  Array Werte_B.s{20}(20) ; das geht ^^
EndStructure

Re: fixed StringArray erzeugen

Verfasst: 10.12.2013 00:37
von SBond
oh mann.... :)
super!

Ich dussel hätte es wirklich mal drehen müssen.
Was mich allerdings wundert, dass:

Code: Alles auswählen

Debug SizeOf(irgendwas)

nun 4 ausgibt, anstatt 400

Ich habe vor über eine TCP/IP-Verbindung eine Struktur als Payload zu verschicken. Da ich mit dynamischen Stringlängen eventuell Probleme bekommen würde, war die Idee, dass ich feste Stringlängen definiere. Bei einzelnen Strings geht das wunderbar und SizeOf() gibt mit die korrekte Byte-größe der Struktur an. Wenn jetzt das Array mit in der Struktur ist, dann gibt SizeOf() nur die Größe des Arraytyps aus.

Kann man die Gesamtgröße der Struktur inklusive Arrays ausgeben?

Beispiel (als ASCII kompiliert):

Code: Alles auswählen

Structure irgendwas
	Wert_1.i
	Wert_2.i
	String.s{40}
 	Array Werte_B.s{20}(20)
EndStructure
 
Debug SizeOf(irgendwas)
Debug gibt 52 aus (4+4+40+4), aber die tatsächliche Größe ist 448 Byte (4+4+40+20*20)

gibt es in Purebasic einen Befehl, den ich ggf übersehen haben könnte?
SizeOf() scheint nicht das richtige zu sein


lg
SBond

Re: fixed StringArray erzeugen

Verfasst: 10.12.2013 00:44
von HeX0R
Wenn Dein Array eh eine fixe Anzahl Elemente hat, mach es lieber so:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
   Werte_B.s{20}[20]
EndStructure
 
Debug SizeOf(irgendwas)

Re: fixed StringArray erzeugen

Verfasst: 10.12.2013 00:56
von SBond
vielen vielen Dank :)

jetzt passt alles :mrgreen:
was würde ich nur ohne euch machen ^^

viele Grüße
SBond ^^

Re: fixed StringArray erzeugen

Verfasst: 10.12.2013 10:02
von NicTheQuick
Das das hier 20 Werte sind, ist eh nicht ganz korrekt:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
    Array Werte_B.s{20}(20)
EndStructure
 
Debug SizeOf(irgendwas)
In Wirklichkeit hat dieses Array nämlich 21 Elemente, von 0 bis 20.
Während dieses hier wirklich nur 20 Element hat:

Code: Alles auswählen

Structure irgendwas
   Wert_1.i
   Wert_2.i
   String.s{40}
   Werte_B.s{20}[20]
EndStructure
Das ist eine komische Eigenart von Purebasic, aber man gewöhnt sich dran.