Newsgroup: it.comp.lang.c
Titolo: conversione di struct

Salve a tutti
Qualcuno mi puo aiutare ho il seguente problema:
ho le seguenti struct
struct pacchetto
{
 char tipo;
u_short mit;
u_short dest;
char dati[256];
}
e struct indirizzo
{
 u_long IP;
u_short porta;
}
il mio problema č che devo inserire nel campo dati la struct indirizzo
come posso fare?
Grazie anticipatamente a tutti coloro che saranno cosě gentili ad aiutarmi
Saluti
Mirko

come posso fare?
Temo che l'unico modo portabile per farlo sia il seguente :
#include <stdio.h>
#include <limits.h>
typedef unsigned short u_short ;
typedef unsigned long  u_long ;
#define u_long_size     sizeof( u_long )
#define u_short_size    sizeof( u_short )
struct pacchetto
{
       char tipo ;
       u_short mit ;
       u_short dest ;
       unsigned char dati[256] ;
    /* ^^^^^^^^ questa e' la trasformazione da compiere */
} ;
struct indirizzo
{
       u_long IP ;
       u_short porta ;
} ;
/*  addr2pckt()  --------------------
    pone un indirizzo in un pacchetto
    --------------------------------- */
void addr2pckt ( struct indirizzo a,
                 struct pacchetto * p )
{
     int i, j ;
     for ( i = 0 ; i < u_long_size ; i++ )
     {
         p->dati[i] = a.IP & UCHAR_MAX ;
         a.IP >>= CHAR_BIT ;
     }
     for ( j = 0 ; j < u_short_size ; j++, i++ )
     {
         p->dati[i] = a.porta & UCHAR_MAX ;
         a.porta >>= CHAR_BIT ;
     }
}
/*  pckt2addr()  ----------------------
    estrae un indirizzo da un pacchetto
    ----------------------------------- */
void pckt2addr ( struct pacchetto p,
                 struct indirizzo * a )
{
     int i, j ;
     for ( i = 0, a->IP = 0 ; i < u_long_size ; i++ )
     {
         a->IP = ( a->IP <<= CHAR_BIT ) |
                 p.dati[u_long_size - i - 1] ;
     }
     for ( j = 0 ; j < u_short_size ; j++, i++ )
     {
         a->porta = ( a->porta <<= CHAR_BIT ) |
                    p.dati[u_short_size - i - 1] ;
     }
}
int main()
{
    struct pacchetto p = { 'A', 0x1234, 0x5678 } ;
    struct indirizzo a = { 0x09ABCDEF, 0x1234 } ;
    struct indirizzo b = { 0x00000000, 0x0000 } ;
    addr2pckt( a, &p ) ;
    pckt2addr( p, &b ) ;
    return 0 ;
}
--
Andrea Laforgia
andrea_...@bigfoot.com

 come posso fare?.....................
Prova cosi':
#include<stdio.h>
#include<string.h>
typedef unsigned short u_short;
typedef unsigned long  u_long;
typedef struct
                   {
                   char tipo ;
                   u_short mit ;
                   u_short dest ;
                   unsigned char dati[256] ;
                   } pacchetto;
typedef struct
                  {
                  u_long IP ;
                  u_short porta ;
                  } indirizzo;
void main()
{
         pacchetto pack = { 'I', 1, 2 };
         indirizzo ind  = { 0x1213EFFE,0xAABB };
         indirizzo ind2 = { 0,0 };
 /* Da indirizzo a pacchetto */
         memcpy ( ( void* ) pack.dati,
                         ( void* ) &ind,
                         ( sizeof ( u_short ) + sizeof ( u_long ) )
                       );
 /* Da pacchetto a indirizzo */
         memcpy ( ( void* ) &ind2,
                         ( void* ) pack.dati,
                         ( sizeof ( u_short ) + sizeof ( u_long ) )
                       );
}
Ciao.
--
Posted from 
mta04-acc.tin.it
 [212.216.176.35]
via Mailgate.ORG Server - 
http://www.mailgate.org