Ich mal wieder..
Schon den ganzen Mittag dran aber ich komm nicht klar..
Ich habe eine DLLStruct names header
[autoit]$struct_header = DllStructCreate("align 1;uint sequence;uint size;uint numwords")
[/autoit]Nun lese ich von meinem Socket :
[autoit]$buffer = TCPRecv($socket,DllStructGetSize($struct_header),1)
[/autoit]In $buffer steht nun(als String..):
0x010000402600000003000000
Wobei dies so zu sehen ist:
01000040 = Sequence
26000000 = Size
03000000 = Numwords
Nun müsste ich diese "Hex-Werte" noch in die richtige reihenfolge bringen( aus 03000000 -> 00000003 machen) und dann aus dem String "00000003" eine dezimale Zahl machen und diese in meiner struktur abspeichern, damit ich nacher den dezimalen Wert 3 erhalte.
Nun könnte ich per BinaryMid($buffer,1,4) die ersten 4 Byte herausfiltern ( 01000040 ) diese dann mit StringFunktionen nach 40000001 wandeln und darauf dann Number(40000001) anwenden und hätte dann eine dezimale Zahl, welche ich per DLLStructSetData($struct_Header,1,*zahl*) setzten könnte. Aber das wär ja ein Irre Aufwand für nur einen wert?
Ich bin das ganze von c gewohnt und komme einfach nicht mit den Datentypen klar...
In c würde das so aussehen
struct Header{
int sequence;
int size
int numwords
};
struct Header h;
recv(socket,&h,sizeof(struct Header));
h.sequence = ntohl(h.sequence); //NetworkToHostLong Order wandeln
...
Alles anzeigen
Und er würde nun an die Adresse von h soviel schreiben wie der Header groß ist.
Mit h.sequence hät ich jetzt gleich den int wert den ich empfangen habe.
Ich hab den ganzen Mittag geschaut nach Besipielen, aber alle verschicken nur Strings und keine 4 byte Zahlen.
Hoffe mir kann jemand helfen, da ich langsam echt verzweifel...