2017-07-20 10 views
1

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?

+1

Utilisez les types de longueur fixe 'stdint.h'. –

+0

@EugeneSh. Si le type de caractère est supérieur à 8 bits, n'aiderait pas. –

+0

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 ... –

Répondre

0

Si nous regardons comment le PIC stocke les chaînes uint8_t dans son flash, qui est orienté mot et la taille des mots dépend du PIC (il n'est ni 8 ni 16 bits dans certains PIC), les bits supérieurs sont simplement mis à zéro.