Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PHP to Delphi: pack() / unpack(); (https://www.delphipraxis.net/141853-php-delphi-pack-unpack-%3B.html)

Valle 18. Okt 2009 00:43

Re: PHP to Delphi: pack() / unpack();
 
Mh, auf der Dokumentations-Seite steht:

Zitat:

Unless otherwise noted, all values are little-endian
Da das Wort Endian im gesamten Dokument nicht weiter erwähnt wude, sind also Angaben litte Endian. Dein unpack-String ("nvCCCCv") enthält allerdings eine Mischung aus Big und Little Endian. "n" ist Big Endian, daher also glaube ich falsch. "C" hat eigenartiger Weise keine Endianness, was mich gerade ziemlich verwirrt.

Hast du die empfangenen Daten mal ausgewertet? Welche davon sind denn realtistisch ( = wahrscheinlich richtig)?

Liebe Grüße,
Valle

himitsu 18. Okt 2009 00:52

Re: PHP to Delphi: pack() / unpack();
 
C dürfte ein Byte sein, also wäre das Endianness dort wohl auch egal :angel:

xSkaschY 18. Okt 2009 01:00

Re: PHP to Delphi: pack() / unpack();
 
Naja. Das problem ist, das Protocol reagiert nicht auf falsche Daten. Sprich ich bekomme nichts zurück.

Habe gerade mal etwas gegoogelt und bin auf folgendes gestoßen:

Delphi-Quellcode:
function ChangeEndian16(X: WORD): WORD; register; //oder auch Swap
asm
  xchg AL, AH
end;

Nunja, es kommt dem Resultat schon recht nähe, jedoch schrumpft der Binary String nun um 2 Bytes, was auch wieder nicht stimmen kann, weil es 31 Byte sein "müssen".

Wobei der Wert dann nicht mehr passt.

Beispiel:

["wHash"] => WORD(65535)

wird dann zu

["wHash"] => WORD(13642)


"65535" ist aber korrekt. (0x4A 0x35)

Luckie 18. Okt 2009 01:36

Re: PHP to Delphi: pack() / unpack();
 
Kan mir mal bitte jemand erklären, was man mit der Funktion macht oder wozu man sie braucht? Aus dem PHP Manual werde ich nicht ganz schlau:
Zitat:

Packt die angegebenen Argumente unter Beachtung von format in eine Binär-Zeichenkette.
Und das Beispiel verstehe ich auch nicht:
Code:
<?php
$binaerdaten = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
Soll ergeben:
Code:
0x12, 0x34, 0x78, 0x56, 0x41, 0x4

xSkaschY 18. Okt 2009 01:41

Re: PHP to Delphi: pack() / unpack();
 
Die Funktion packt alle möglichen Daten in ein Binary String.

Sprich, word, byte, string, integer usw to Binary unter berücksichtigung verschiedener "pack-formate".

himitsu 18. Okt 2009 01:42

Re: PHP to Delphi: pack() / unpack();
 
du gibst der Funktion z.B. einzelne Variablen/Konstanten

und die Funktion macht daraus einen Binärstrom

#$12#$34#$78#$56#$41#$4

[edit]
zwei Dumme - ein Gedanke :lol:

Luckie 18. Okt 2009 01:46

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

Hm, und wann braucht man so was?

xSkaschY 18. Okt 2009 01:52

Re: PHP to Delphi: pack() / unpack();
 
Wenn man zum Beispiel, wie in meinem Fall, eine Anfrage per UDP Sockets an einen Server schickt und bestimmte Daten auswerten möchte.

wicht 18. Okt 2009 01:54

Re: PHP to Delphi: pack() / unpack();
 
Ich habe es z.B. mal benutzt, um mit einem HTTP-Request zwei Dateien abzuholen. Erst die beiden Integers für die Länge an den Anfang schreiben und dann die beiden Dateien.

Doofer roter Kasten. Aber mein Mitteilungsbedürfnis zwingt mich zu posten...

Luckie 18. Okt 2009 01:57

Re: PHP to Delphi: pack() / unpack();
 
Wohl wieder eine dieser Funktionen, die einem nicht einfällt, wenn man sie braucht. :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 Uhr.
Seite 2 von 3     12 3      

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