Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

fsockopen und Endianess

3 views
Skip to first unread message

Hans Peter

unread,
Jul 12, 2009, 6:21:08 AM7/12/09
to
Hallo zusammen,

ich lese mit fsockopen 4 Bytes von unterschiedlichen Servern. Diese 4
Bytes enthalten ein Zeitstempel vom dem Serversystem. Jetzt habe ich das
Problem das ich nicht weiᅵ wie diese 4 Bytes (Big Endian - Little
Endian) auf dem System gespeichert sind. Mir fehl um es genau zu sagen
die funktion "ntoh". Die Bytes entsprechend zu drehen ist kein Problem.
Ich muss nur wissen in welcher Byte-Order die 4 Bytes auf dem
Serversystem gespeichert wurden und welche Byte-Order mein aktuelles
System hat. Gibt es da eine Mᅵglichkeit?

Gruᅵ Hans

Claus Reibenstein

unread,
Jul 12, 2009, 8:04:12 AM7/12/09
to
Hans Peter schrieb:

> ich lese mit fsockopen 4 Bytes von unterschiedlichen Servern.

Dunkel ist Deiner Rede Sinn.

fsockopen() liest nichts, sondern ᅵffnet eine Verbindung und gibt im
Erfolgsfall einen Filepointer zurᅵck.

> Diese 4
> Bytes enthalten ein Zeitstempel vom dem Serversystem.

Und wie bist Du an diese 4 Bytes rangekommen? Welches Format hat der
Zeitstempel? Wo kommt er her? Wie kommt er zustande?

> Jetzt habe ich das
> Problem das ich nicht weiᅵ wie diese 4 Bytes (Big Endian - Little
> Endian) auf dem System gespeichert sind.

Wie wᅵre es, wenn Du Dir diesen Zeitstempel als Text senden lᅵsst? Dann
stellt sich dieses Problem nicht.

Mehr kann ich ohne genauere Informationen leider nicht sagen.

Gruᅵ. Claus

Sven Drieling

unread,
Jul 12, 2009, 12:15:02 PM7/12/09
to
Hans Peter wrote:

Hallo,

> Mir fehl um es genau zu sagen
> die funktion "ntoh".

pack()


tschuess
[|8:)

Sam Kang

unread,
Jul 12, 2009, 2:04:55 PM7/12/09
to
Hans Peter schrieb:

> ich lese mit fsockopen 4 Bytes von unterschiedlichen Servern. Diese 4
> Bytes enthalten ein Zeitstempel vom dem Serversystem. Jetzt habe ich das
> Problem das ich nicht weiᅵ wie diese 4 Bytes (Big Endian - Little
> Endian) auf dem System gespeichert sind.

Das du schon wissen. Ist es z.Z eine Intel ist er endian little. Beim Motorola
z.B big endian. Wurde der Mit Java erzeugt auch big endian. Hat der
Programmier das geswapt dann litte endian. Du kᅵnntest genauso gut aus dem
Kaffeesatz lesen.

> Mir fehl um es genau zu sagen
> die funktion "ntoh". Die Bytes entsprechend zu drehen ist kein Problem.

nᅵtzt nix - ntoh ᅵndert big(netwerkorder) in die des hostes welche auch immer
das ist.

> Ich muss nur wissen in welcher Byte-Order die 4 Bytes auf dem
> Serversystem gespeichert wurden und welche Byte-Order mein aktuelles
> System hat. Gibt es da eine Mᅵglichkeit?

Fᅵlle einen Integer mit 0x01020304und schaue dir den Wert des ersten Bytes an.
4 fᅵr little 1 fᅵr big.

z.B.

$int=0x01020304;
$bin=pack('I',$int);
$bytes=unpack('C4b',$bin);
if ($bytes['b1']==1) echo "little\n";
else if ($bytes['b1']==4) echo "big\n";
else echo "anderes system\n";


Sam

Sam Kang

unread,
Jul 12, 2009, 2:07:00 PM7/12/09
to
ups! muss heissen:

if ($bytes['b1']==4) echo "little\n";
else if ($bytes['b1']==1) echo "big\n";

Sam

Claus Reibenstein

unread,
Jul 13, 2009, 5:05:40 AM7/13/09
to
Hallo Sam,

nichts zum Thema, aber zur Einstellung Deines Newsreaders: Zitate
beginnen ᅵblicherweise mit ">" oder "> ", aber nicht mit " >". Es wᅵre
nett, wenn Du dies in Deinem Reader korrigieren kᅵnntest, damit andere
Reader die Zitate erkennen und entsprechend darstellen kᅵnnen.

Gruᅵ. Claus


Sam Kang schrieb:

Hans Peter

unread,
Jul 13, 2009, 3:05:54 PM7/13/09
to
Hallo Sam,


> nᅵtzt nix - ntoh ᅵndert big(netwerkorder) in die des hostes welche auch
> immer das ist.

Ok, die besonderheit ist hierbei das ich mit fsockopen einen externen
Zeitserver befrage. Die ᅵbergebenen Bytes bekomme ich als Big-Endian
zurᅵckgegeben. Da ich die meines eigenen Hosts kenne (Little-Endian)
kenne kann ich die Bytes swappen. Die Bytes des Zeitservers mᅵssen lt.
http://en.wikipedia.org/wiki/Byte_order#Endianness_in_networking immer
Big-Endian sein und da es so definiert ist sollte es eigentlich kein
Problem mehr sein und ich mᅵsste immer von Big -> Little konvertieren.

> Fᅵlle einen Integer mit 0x01020304und schaue dir den Wert des ersten
> Bytes an. 4 fᅵr little 1 fᅵr big.

Generell ist das ist eine gute Idee! Da ich aber jetzt den Zustand (Big
nach Little) kenne benᅵtige ich es nicht, aber im Zweifelsfall ist es
auf jeden Fall gangbar.

Gruᅵ Hans

0 new messages