Un caractère de C ne mesure pas toujours 8 bits car il dépend de la plate-forme. Sa longueur en bits est donnée par la valeur CHAR_BITS.Type de primitive C pour les champs de la trame Ethernet
Cependant, la définition des en-têtes de protocole réseau standard est faite en utilisant un octet car sa longueur est de 8 bits. Par exemple, le champ ethertype dans l'en-tête de trame 802.3 a 2 octets, chacun a 8 bits.
Je me demande, quand le type de caractère dans la machine est 16 bits, et tout type devrait être adressable en utilisant cette longueur de char, comment le contenu de la mémoire est rempli avec une trame quand il arrive à la machine? Quel type C primitif doit être utilisé pour représenter un type d'éther dans une trame, sur des machines où la valeur de longueur de type de caractère est supérieure à 8 bits?
Utilisez les types de longueur fixe 'stdint.h'. –
@EugeneSh. Si le type de caractère est supérieur à 8 bits, n'aiderait pas. –
Ce serait une quantité ridicule de décalage de bits et de masquage. Ou vous pourriez espérer qu'un bitfield vous aiderait ... mais là encore, comment ils sont mis en mémoire est défini par l'implémentation. C'est pourquoi 'CHAR_BIT! = 8' n'est pas populaire dans les ordinateurs génériques ... –