On 29.Apr 2005 - 19:29:22, Michael Ott wrote:
> Hallo Bruno!
>
> > > Ich lese gerade mittels socket eine Struct, das sich nicht an die
> > > 32bit-Grenze nicht h�lt.
> > >
> > > Ich habe folgendes Strukt:
> > > struct {
> > > char[10];
> > > int;
> > > }
> > > und genau das bekomme ich �ber das Netz, nur das er mir wirklich 10bit
> > > und danach die Zahl bringt,
> >
> > 10 Byte wahrscheinlich. Und wo ist das Problem? Du sagst es wird alles
> > �bertragen, erst 10 und dann nochmal 4 Byte. Da sehe ich weit und
> > breit kein Problem, und wenn da eines w�re hat es mit einer wie immer
> > gearteten 32bit Grenze vermutlich gar nichts zu tun.
> >
> > Weisst du nicht wie du die 14 Byte korrekt lesen sollst, oder wo
> > hapert es? Mit etwas Quellcode lie�e sich nebenbei vielleicht mehr
> > sagen.
> gcc schreibt aber intern das int nicht gleich hinter die chars, sondern
> f�ngt an der n�chsten 32bit-Grenze an.
Das ist keine Grenze sondern heisst "Alignment", wenn mich mein
Rechnerkenntnisse nicht im Stich lassen, sind auf i386 nur gerade
Adressen ansprechbar (aber wie gesagt, mag mich da auch irren).
> Und dabei liegt das Problem. Die
> Daten aus dem Socket sind aber hintereinander weg geschrieben.
Dann lies sie doch auch so ein...
> Ich habe mir die Speicheraddressen ausgegeben und da f�ngt das int vom
> Socket zwei Bytes vor dem dem int aus der Struktur an.
>
> Ich habe dabei die Bytes mir einzeln ausgelesen
Du musst genau das machen, jedes Byte einzeln auslesen und dann in die
Struktur packen. Also fuers array ist das recht einfach und fuer den
int wuerd ich 2 Bytes auf einmal lesen und dann
int i = (b1) | (b2 >> 8 )
Wenn mich mein C nicht im Stich laesst. Damit kriegst du 16 Byte, die
unteren 8 vom ersten gelesenen und die oberen vom 2. gelesenen Byte.
Damit laesst sich dann ein int erzeugen, wenns int 4 Bytes hat halt
entsprechend 4 Bytes lesen und mit >> 16 und >> 24 verschieben.
Andreas
--
Excellent day for putting Slinkies on an escalator.
--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/
Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)