|
| 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/
| |
|
|