Mini Chat - Austausch von Nachrichten

Anfängerfragen zum Programmieren mit PureBasic.
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

Beitrag von Stromberg »

Gibt es eigentlich einen Unterschied zwischen "*" und "@"? Beide Zeichen dienen doch als Pointer, oder?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Also, wenn ich Daten egal welchen typs übertragen will, dann kopiere ich einfach den Inhalt eines Buffers des Senders in den Buffer des Empfängers (und mss natürlich selbst drauf achten, welcher Datentyp da gerade empfangen wurde).

Dieses Verfahren geht am besten mit Send/ReceiveNetworkData().



Habe ich das jetzt richtig verstanden? *lieb :roll: guck*
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@and51
richtig.

@stromberg
das * ist teil des variablennamens (also kein operator oder so) und ist eigentlich nur eine kennzeichung für den programmierer, um die verwendung der variablen als adressspeicher (pointer) zu identifizieren:

Code: Alles auswählen

n.b=127

*p=@n
Debug PeekB(*p)   ;=127

;es geht auch so, mit einer gewöhnlichen longvariable
p.l=@n
Debug PeekB(p)    ;=127
das @ hingegen ist der adressoperator, der, vor den namen einer variable geschrieben, ihre adresse zurückgibt.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

#NULL hat geschrieben:@and51
richtig.
Ja! Ja! Jaaaaaaaaaa! Jahuuuuuuuuu! :mrgreen: :D
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

#NULL hat geschrieben:wenn du so was versendest:

Code: Alles auswählen

n.w=257
SendNetworkData(ConnectionID, @n, 4)
und so empfängst:

Code: Alles auswählen

ReceiveNetworkData(ClientID, Buffer, 1000)
MessageRequester( "sent", Str(PeekB(Buffer)), 0)
dann erhältst du "1" als ausgabe, also das zweite byte (der zahl 257). würd gern mal wissen ob die bytes schon im speicher im big-endian liegen, oder erst im big-endian versendet werden.(?)

//...liegt scheinbar am versenden
lol ... das lachen konnt ich mir jetzt nicht verkneifen :D
Du sendest vier Byte ... aber ein Word hat nur zwei Byte ;-) ... do drauf
hast du AND davor hingewießen? *grins* löl
Ansonnsten sollte nicht eine 1 zurück geleifert werden, sondern eine 2 bzw
bei deinem beispiel eine 4 ... da du ja 4 Byte versendest ;-)

Pointer:
Das was du über das Sternchen und den Klammeraffen schreibst stimmt
so nicht ganz. Das * wird bei der Deklaration benutzt und gehört bei PB
dann bei Variablen zum Namen. Bei Strukturen ist das nicht der Fall!
Beispiel:

Code: Alles auswählen

Structure Zeiger
X.l
Y.l
*Z.Zeiger
EndStructure
Test.Zeiger 
Test\Z = AllocateMemory(SizeOf(Zeiger))
Nimmst du das Sternchen weg, wird es nicht mehr klappen ;-)

Das @ Zeichen verwendest du bei bereits vorhanden Variablen, um deren
Speicheradresse raus zu bekommen. Es gibt auch ein Tutorial zu Pointern,
aber den Link kenn ich nicht auswendig. Irgend wer aus dem Forum hier
hat das mal geschrieben ... müsst nur mal nach suchen :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

PMV hat geschrieben:Du sendest vier Byte ... aber ein Word hat nur zwei Byte Wink ... do drauf
hast du AND davor hingewießen? *grins* löl
das war natürlich nicht ganz korrekt, aber auch wenn du nur 2 bytes versendest erhältst du in dem beispiel "1" als ausgabe! (das höherwertige byte ist 1 im gesamten bereich von 256...511:
00000001 00000000 (256)
00000001 11111111 (511)
bei deinem beispiel eine 4 ... da du ja 4 Byte versendest :wink:
?!?!? :freak:



wenn du aber weniger bytes einer variable versendest, als ihr typ besitzt. ist das viel fataler, da ja nur eine teilmenge des wertebereichs versendet wird und du auf empfängerseite keine chance mehr hast, den inhalt der ursprünglichen variablen zu ermitteln.

bezüglich der strukturen hast du recht.

ein tut zu pointern gibt's hier. :allright: . scheint ganz gut zu sein.
my pb stuff..
Bild..jedenfalls war das mal so.
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

Beitrag von Stromberg »

Hab' mir das Tutorial mal durchgelesen. Wirklich gut gemacht. :allright:
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

ups ... kommt davon wenn man nur flüchtig auf den Code schaut /:-> ...
die "1" als ausgabe stimmt natürlich ... :oops:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten