AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PHP to Delphi: pack() / unpack();

Ein Thema von xSkaschY · begonnen am 17. Okt 2009 · letzter Beitrag vom 18. Okt 2009
Antwort Antwort
Seite 1 von 3  1 23      
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#1

PHP to Delphi: pack() / unpack();

  Alt 17. Okt 2009, 17:07
N'Abend zusammen,

Versuche gerade einen PHP in Delphi zu kopieren, jedoch scheitere ich an der pack(); mathode von PHP.

Folgend der PHP Code:

Code:
$sOutput = pack(
   "nvCCCCv",
   $this->wMagic,
   $this->wHash,
   $this->byVersion,
   $this->byPacketType,
   $this->byRequestType,
   $this->byUnknown0x00,
   $this->wFieldCount
);
Ich habe es nach einschlägiger Suche mal so probiert:

Delphi-Quellcode:
  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;
Aber in PHP habe ich 31 Byte, in delphi nur 30... da fehlt ein Byte!

Und auch der Binary String ist komplett anders:

PHP etwa: "J5ÿÿ���i<aCg+<QlMB Qn0m"

In Delphi bekomme ich nur ein "5Jÿÿ" in des TMemo.


Anbei wie das fertige Paket "ausschauen" soll.


Wie komme ich nu weiter?


LG Toby
Miniaturansicht angehängter Grafiken
packet_745.png  
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: PHP to Delphi: pack() / unpack();

  Alt 17. Okt 2009, 17:17
Du hast ja auch das eine Byte vergessen:

Byte - Unknown, appears to always have the value 0x00
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#3

Re: PHP to Delphi: pack() / unpack();

  Alt 17. Okt 2009, 23:05
Hallo,

danke für deine Antwort.

Du hast recht, ich hab die Procedure Argumente etwas durcheinander gebracht. Besten dank!
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#4

Re: PHP to Delphi: pack() / unpack();

  Alt 17. Okt 2009, 23:18
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
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

Re: PHP to Delphi: pack() / unpack();

  Alt 17. Okt 2009, 23:22
Speicher es in eine Datei und öffne sie mit einem Bei Google suchenHexeditor.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#6

Re: PHP to Delphi: pack() / unpack();

  Alt 18. Okt 2009, 00:01
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:

AAO3 Server UDP Query
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#7

Re: PHP to Delphi: pack() / unpack();

  Alt 18. Okt 2009, 00:15
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
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#8

Re: PHP to Delphi: pack() / unpack();

  Alt 18. Okt 2009, 00:17
Nunja Wie soll ich sagen. In PHP funktioniert es ja Nur Delphi mag es nicht!

Ich hab die Problematik eher andersrum Bitte nicht hauen!
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#9

Re: PHP to Delphi: pack() / unpack();

  Alt 18. Okt 2009, 00:26
Eventuell musst du die Endianness umstellen. Wie das genau geht steht auf der Dokumentationsseite der PHP-Funktion. Was du brauchst ist little Endian, zumindest wenn Delphi das nicht irgendwie ändern sollte.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#10

Re: PHP to Delphi: pack() / unpack();

  Alt 18. Okt 2009, 00:34
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz