[Résolu] padding entre les elements d'une structure
Bonjour,
donc un programme en C je recoi par une socket un unsigned char * qui contien :
- une string
- un long
- une string
- un byte
- ....
(chaque string a un 0 a la fin)
Je voudrais savoir si je peu faire une structure correspondant a la structure de mon buffer ou si je doi traiter les elements un par un.
On ma parler d'un "padding entre les elements d'une structure" qui pourais me gener pour la portabilitee ??
Merci
Re: padding entre les elements d'une structure
Citation:
Envoyé par chacal
donc un programme en C je recoi par une socket un unsigned char * qui contien :
- une string
- un long
- une string
- un byte
- ....
(chaque string a un 0 a la fin)
Je voudrais savoir si je peu faire une structure correspondant a la structure de mon buffer ou si je doi traiter les elements un par un.
On ma parler d'un "padding entre les elements d'une structure" qui pourais me gener pour la portabilitee ??
Oui, Si on veut être portable, on ne peut pas utiliser une structure C pour mapper un flux de bytes. Il faut partir d'un tableau de bytes (unsigned char) et attribuer une sémantique à chaque byte. Ca, c'est portable.
D'une manière générale, les structures sont utiles en interne, mais pas pour les interfaces externes.
Tu dois donc écrire un convertisseur qui d'un coté prend les données dans un flux de bytes (tableau de unsigned char) et de l'autre les rage dans une structure interne qui pourrait être par exemple :
Code:
1 2 3 4 5 6 7 8
|
struct data
{
char *sa;
long a;
char *sb;
unsigned char b;
}; |
Evidemment, les pointeurs doivent être convenablement initialisés...
Attention aussi aux données binaires (long) qui peuvent être à un format qui n'est pas forcément celui de la machine. Ici, ntohl() est ton ami... si la convention 'réseau' a été respectée... (MSB en tête)