![]() |
PHP to Delphi: pack() / unpack();
Liste der Anhänge anzeigen (Anzahl: 1)
N'Abend zusammen,
Versuche gerade einen PHP in Delphi zu kopieren, jedoch scheitere ich an der ![]() Folgend der PHP Code:
Code:
Ich habe es nach einschlägiger Suche mal so probiert:
$sOutput = pack(
"nvCCCCv", $this->wMagic, $this->wHash, $this->byVersion, $this->byPacketType, $this->byRequestType, $this->byUnknown0x00, $this->wFieldCount );
Delphi-Quellcode:
Aber in PHP habe ich 31 Byte, in delphi nur 30... da fehlt ein Byte! :(
rData := TStringStream.Create('');
try rData.Position:= 0; rData.Write(rPacketHeader.wMagic, SIZEOF(WORD)); rData.Write(rPacketHeader.wHash, SIZEOF(WORD)); rData.Write(rPacketHeader.byVersion, SIZEOF(BYTE)); rData.Write(rPacketHeader.byPacketType, SIZEOF(BYTE)); rData.Write(rPacketHeader.byUknown0x00, SIZEOF(BYTE)); rData.Write(rPacketHeader.wFieldCount, SIZEOF(WORD)); if rPacketHeader.byPacketType = AA3_PACKET_TYPE_FRAGMENTED_RESPONSE then begin rData.Write(rPacketHeader.wOrder, SIZEOF(WORD)); rData.Write(rPacketHeader.wTotal, SIZEOF(WORD)); end; Result := rData.DataString + rPacketHeader.sData; finally rData.Free; end; Und auch der Binary String ist komplett anders: PHP etwa: "J5ÿÿ���i<aCg+<QlMBQn0m" In Delphi bekomme ich nur ein "5Jÿÿ" in des TMemo. Anbei wie das fertige Paket "ausschauen" soll. Wie komme ich nu weiter? LG Toby |
Re: PHP to Delphi: pack() / unpack();
Du hast ja auch das eine Byte vergessen:
Byte - Unknown, appears to always have the value 0x00 |
Re: PHP to Delphi: pack() / unpack();
Hallo,
danke für deine Antwort. Du hast recht, ich hab die Procedure Argumente etwas durcheinander gebracht. Besten dank! :) |
Re: PHP to Delphi: pack() / unpack();
Irgendwie kommt aber immernoch nicht das richtige zustande.
Wie kann ich mir den Binary String den mal anzeigen lassen? ShowMessage oder ein TMEmo lässt die hälfte raus. LG |
Re: PHP to Delphi: pack() / unpack();
|
Re: PHP to Delphi: pack() / unpack();
Also irgendwas läuft da falsch...
PHP Binary String: 4A35FFFF023F023F013F693C176143671F2B3C516C4D420B51 7F026E1E306D Delphi Binary String 4CAA7202E0F41700020E470024F81700180E4700E0F4170030 7068022C876F Obwohl die gleichen Daten übergeben werden. Also scheint irgendwas mit dem "pack()" nicht zu stimmen. Hier mal eine übersicht was mein Ziel ist: ![]() |
Re: PHP to Delphi: pack() / unpack();
Moin,
ich bin zwar schon gut angetrunken und bin mir nicht sicher ob es hilft, aber da, wo ich mal pack() benutzt habe, habe ich den Variablen noch einen Typecast mitgegeben. Bei PHP kann man sich glaube ich nie so sicher sein, was was ist.... Naja ich hasse PHP.. bitte nicht hauen :) |
Re: PHP to Delphi: pack() / unpack();
Nunja :-) Wie soll ich sagen. In PHP funktioniert es ja ;) Nur Delphi mag es nicht!
Ich hab die Problematik eher andersrum :D Bitte nicht hauen! :) |
Re: PHP to Delphi: pack() / unpack();
Eventuell musst du die
![]() Liebe Grüße, Valle |
Re: PHP to Delphi: pack() / unpack();
folgende "endianness" werden benötigt:
vorzeichenloser Short-Typ (immer 16 Bit, Byte-Folge Big Endian) vorzeichenloser Short-Typ (immer 16 Bit, Byte-Folge Little Endian) vorzeichenloser Long-Typ (immer 32 Bit, Byte-Folge Little Endian) vorzeichenloses Zeichen
Code:
$sOutput = pack(
"nvCCCCv", $this->wMagic, $this->wHash, $this->byVersion, $this->byPacketType, $this->byRequestType, $this->byUnknown0x00, $this->wFieldCount );
Code:
n = Magic
v = Hash C = Version C = PacketType C = RequestType C = Unkown 0x00 ($00) v = FieldCount ---- n = vorzeichenloser Short-Typ (immer 16 Bit, Byte-Folge Big Endian) v = vorzeichenloser Short-Typ (immer 16 Bit, Byte-Folge Little Endian) C = vorzeichenloses Zeichen an anderer Stelle noch V = vorzeichenloser Long-Typ (immer 32 Bit, Byte-Folge Little Endian) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz