/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Serialisering (C)
Fra : Jakob Møbjerg Nielse~


Dato : 04-08-04 13:52

Hej

Er der nogen her der har et link eller kan give en forklaring på,
hvordan man kan serialisere data (en stor struct) i C. Det skal sendes
gennem en socket.

Jeg synes ikke jeg kan finde noget om det på nettet.

--
Jakob Møbjerg Nielsen | Nordvestjysk Brass Band - http://nvbb.dk
jakob@dataloger.dk | Vinder af 1. division
http://www.jakobnielsen.dk/ | - Grenland Brass Festival 2004
| http://www.grenlandbrass.com/festival/

 
 
Bertel Brander (04-08-2004)
Kommentar
Fra : Bertel Brander


Dato : 04-08-04 19:15

Jakob Møbjerg Nielsen wrote:

> Hej
>
> Er der nogen her der har et link eller kan give en forklaring på,
> hvordan man kan serialisere data (en stor struct) i C. Det skal sendes
> gennem en socket.
>

Det kommer lidt an på hvem der sidder i hver sin ende.

Hvis man ved hvad man gør kan man blot lave:

typedef struct
{
int x;
int y;
}Foo;

void Send(const char *p);
void Modtag(char *p);

....

Foo foo;
Send((char *)&foo);
Modtag((char *)&foo);

Det forudsætter at begge ender har samme alignment og byte order.


Ellers må man konvertere hver element til og fra
"Network Byte Order" med htonl/htons og ntohl/ntohs
og sende dem en af gangen.

/b

Per Abrahamsen (04-08-2004)
Kommentar
Fra : Per Abrahamsen


Dato : 04-08-04 22:09

Bertel Brander <bertel@post4.tele.dk> writes:

> void Send(const char *p);
> void Modtag(char *p);

Jeg tror at enten ville jeg lade p være af typen "const Foo*", eller
også ville jeg lade dem tage et ekstra size argument.



Bertel Brander (04-08-2004)
Kommentar
Fra : Bertel Brander


Dato : 04-08-04 23:17

Per Abrahamsen wrote:
> Bertel Brander <bertel@post4.tele.dk> writes:
>
>
>>void Send(const char *p);
>>void Modtag(char *p);
>
>
> Jeg tror at enten ville jeg lade p være af typen "const Foo*", eller
> også ville jeg lade dem tage et ekstra size argument.
>
>

Ideen var at vise at jeg blot ville sende indholdet af foo,
ved at konvertere addressen af foo til en char *

Send() & Modtag() skal naturligvis kende størrelsen på Foo.

/b

Per Abrahamsen (05-08-2004)
Kommentar
Fra : Per Abrahamsen


Dato : 05-08-04 14:26

Bertel Brander <bertel@post4.tele.dk> writes:

> Per Abrahamsen wrote:
>> Bertel Brander <bertel@post4.tele.dk> writes:
>>
>>>void Send(const char *p);
>>>void Modtag(char *p);
>> Jeg tror at enten ville jeg lade p være af typen "const Foo*", eller
>> også ville jeg lade dem tage et ekstra size argument.
>>
>
> Ideen var at vise at jeg blot ville sende indholdet af foo,
> ved at konvertere addressen af foo til en char *
>
> Send() & Modtag() skal naturligvis kende størrelsen på Foo.

Hvis de kun virker på objekter af størrelse Foo, vil det være pænere
at lade dem tage en Foo pointer og selv konvertere.

Jakob Møbjerg Nielse~ (06-08-2004)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 06-08-04 13:05

Bertel Brander wrote:
> Foo foo;
> Send((char *)&foo);
> Modtag((char *)&foo);
>
> Det forudsætter at begge ender har samme alignment og byte order.

Det er jo dejligt nemt. Tak for det

--
Jakob Møbjerg Nielsen | Nordvestjysk Brass Band - http://nvbb.dk
jakob@dataloger.dk | Vinder af 1. division
http://www.jakobnielsen.dk/ | - Grenland Brass Festival 2004
| http://www.grenlandbrass.com/festival/

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408877
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste